⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 hrd_calculate.cpp

📁 华容道算法的人工智能解题程序
💻 CPP
📖 第 1 页 / 共 2 页
字号:
                     {
                         t=*c;  t.prior=c->prior;
                         t.state[i][j]=t.state[i][j-1];
                         t.state[i+1][j]=t.state[i][j-1];
                         t.state[i][j-1]=BLANK; 
                         t.state[i+1][j-1]=BLANK;
                         switch (AddNode(t))
                         {
                             case SUCCESS:  return  SUCCESS;
                             case ADD_ONE_NODE:  next_nodes++;
                         }
                     }
                     
                 } 
              }    
              if(c->state[i][j-1]==CAOCAO)//左侧是曹操 
              {
                 if(i<=3)
                 {
                     if(c->state[i+1][j-1]==CAOCAO && c->state[i+1][j]==BLANK )
                     {
                         t=*c;  t.prior=c->prior;
                         t.state[i][j]=CAOCAO;
                         t.state[i+1][j]=CAOCAO;
                         t.state[i][j-2]=BLANK; 
                         t.state[i+1][j-2]=BLANK;
                         switch (AddNode(t))
                         {
                             case SUCCESS:  return  SUCCESS;
                             case ADD_ONE_NODE:  next_nodes++;
                         } 
                     }
                 }    
              }        
           } 
////////////////////////////////////////////////////////////////////////////////                                    
           // 检查空格右边 
           if (j<3)
           {
              if (c->state[i][j+1]==SOLDIER) //右侧是一兵
              {
                  t=*c;  t.prior=c->prior;
                  t.state[i][j+1]=BLANK;
                  t.state[i][j]=SOLDIER;
                  switch (AddNode(t))
                  {
                      case SUCCESS:  return  SUCCESS;
                      case ADD_ONE_NODE:  next_nodes++;
                  } 
              } 
              if (c->state[i][j+1]>=GENERAL1  &&  c->state[i][j+1]<=GENERAL5)
              {
                 if(j<=1)//右侧是一横将 
                 {
                     if(c->state[i][j+2]== c->state[i][j+1])
                     {
                         t=*c;  t.prior=c->prior;
                         t.state[i][j+2]=BLANK;
                         t.state[i][j]=t.state[i][j+1]; 
                         switch (AddNode(t))
                         {
                             case SUCCESS:  return  SUCCESS;
                             case ADD_ONE_NODE:  next_nodes++;
                         }
                     } 
                 }
                 if(i<=3)//右侧是竖将
                 { 
                     if(c->state[i][j+1]==c->state[i+1][j+1]  && c->state[i+1][j]==BLANK)
                     {
                         t=*c;  t.prior=c->prior;
                         t.state[i][j]=t.state[i][j+1];
                         t.state[i+1][j]=t.state[i][j+1];
                         t.state[i][j+1]=BLANK; 
                         t.state[i+1][j+1]=BLANK;
                         switch (AddNode(t))
                         {
                             case SUCCESS:  return  SUCCESS;
                             case ADD_ONE_NODE:  next_nodes++;
                         } 
                     }
                     
                 } 
              }    
              if(c->state[i][j+1]==CAOCAO)//右侧是曹操 
              {
                 if(i<=3)
                 {
                     if(c->state[i+1][j+1]==CAOCAO && c->state[i+1][j]==BLANK )
                     {
                         t=*c;  t.prior=c->prior;
                         t.state[i][j]=CAOCAO;
                         t.state[i+1][j]=CAOCAO;
                         t.state[i][j+2]=BLANK; 
                         t.state[i+1][j+2]=BLANK;
                         switch (AddNode(t))
                         {
                             case SUCCESS:  return  SUCCESS;
                             case ADD_ONE_NODE:  next_nodes++;
                         } 
                     }
                 }    
              }        
           }
///////////////////////////////////////////////////////////////////////////////
           // 检查空格上边 
           if (i>0)
           {
              if (c->state[i-1][j]==SOLDIER) //上侧是一兵
              {
                  t=*c;  t.prior=c->prior;
                  t.state[i-1][j]=BLANK;
                  t.state[i][j]=SOLDIER;
                  switch (AddNode(t))
                  {
                      case SUCCESS:  return  SUCCESS;
                      case ADD_ONE_NODE:  next_nodes++;
                  }  
              } 
              if (c->state[i-1][j]>=GENERAL1  &&  c->state[i-1][j]<=GENERAL5)
              {
                 if(i>=2)//上侧是一竖将 
                 {
                     if(c->state[i-1][j]== c->state[i-2][j])
                     {
                         t=*c;  t.prior=c->prior;
                         t.state[i-2][j]=BLANK;
                         t.state[i][j]=t.state[i-1][j]; 
                         switch (AddNode(t))
                         {
                             case SUCCESS:  return  SUCCESS;
                             case ADD_ONE_NODE:  next_nodes++;
                         } 
                     } 
                 }
                 if(j<=2)//上侧是横将
                 { 
                     if(c->state[i-1][j]==c->state[i-1][j+1]  && c->state[i][j+1]==BLANK)
                     {
                         t=*c;  t.prior=c->prior;
                         t.state[i][j]=t.state[i-1][j];
                         t.state[i][j+1]=t.state[i-1][j];
                         t.state[i-1][j]=BLANK; 
                         t.state[i-1][j+1]=BLANK;
                         switch (AddNode(t))
                         {
                             case SUCCESS:  return  SUCCESS;
                             case ADD_ONE_NODE:  next_nodes++;
                         } 
                     }
                     
                 } 
              }
              
              if(c->state[i-1][j]==CAOCAO)//上侧是曹操 
              {
                 if(j<=2)
                 {
                     if(c->state[i-1][j+1]==CAOCAO && c->state[i][j+1]==BLANK )
                     {
                         t=*c;  t.prior=c->prior;
                         t.state[i][j]=CAOCAO;
                         t.state[i][j+1]=CAOCAO;
                         t.state[i-2][j]=BLANK; 
                         t.state[i-2][j+1]=BLANK;
                         switch (AddNode(t))
                         {
                             case SUCCESS:  return  SUCCESS;
                             case ADD_ONE_NODE:  next_nodes++;
                         } 
                     }
                 }    
              } 
                     
           } 
////////////////////////////////////////////////////////////////////////////////
           // 检查空格下边 
           if (i<4)
           {
              if (c->state[i+1][j]==SOLDIER) //下侧是一兵
              {
                  t=*c;  t.prior=c->prior;
                  t.state[i+1][j]=BLANK;
                  t.state[i][j]=SOLDIER;
                  switch (AddNode(t))
                  {
                      case SUCCESS:  return  SUCCESS;
                      case ADD_ONE_NODE:  next_nodes++;
                  }  
               } 
              if (c->state[i+1][j]>=GENERAL1  &&  c->state[i+1][j]<=GENERAL5)
              {
                 if(i<=2)//下侧是一竖将 
                 {
                     if(c->state[i+1][j]== c->state[i+2][j])
                     {
                         t=*c;  t.prior=c->prior;
                         t.state[i+2][j]=BLANK;
                         t.state[i][j]=t.state[i+1][j]; 
                         switch (AddNode(t))
                         {
                             case SUCCESS:  return  SUCCESS;
                             case ADD_ONE_NODE:  next_nodes++;
                         } 
                      } 
                 }
                 if(j<=2)//下侧是横将
                 { 
                     if(c->state[i+1][j]==c->state[i+1][j+1]  && c->state[i][j+1]==BLANK)
                     {
                         t=*c;  t.prior=c->prior;
                         t.state[i][j]=t.state[i+1][j];
                         t.state[i][j+1]=t.state[i+1][j];
                         t.state[i+1][j]=BLANK; 
                         t.state[i+1][j+1]=BLANK;
                         switch (AddNode(t))
                         {
                             case SUCCESS:  return  SUCCESS;
                             case ADD_ONE_NODE:  next_nodes++;
                         } 
                      }
                     
                 } 
              }  
              
              if(c->state[i+1][j]==CAOCAO)//下侧是曹操 
              {
                 if(j<=2)
                 {
                     if(c->state[i+1][j+1]==CAOCAO && c->state[i][j+1]==BLANK )
                     {
                         t=*c;  t.prior=c->prior;
                         t.state[i][j]=CAOCAO;
                         t.state[i][j+1]=CAOCAO;
                         t.state[i+2][j]=BLANK; 
                         t.state[i+2][j+1]=BLANK;
                         switch (AddNode(t))
                         {
                             case SUCCESS:  return  SUCCESS;
                             case ADD_ONE_NODE:  next_nodes++;
                         }
                     }
                 }    
              }
              
                    
           }
/////////////////////////////////////////////////////////////////////////////           
           //兵拐弯走
           
           if(j<3)
           {
               if(i>0)
               {
                   if(c->state[i][j+1]==BLANK)
                   {
                       if(c->state[i-1][j]== SOLDIER)
                       {
                           t=*c;  t.prior=c->prior;
                           t.state[i-1][j]=BLANK;
                           t.state[i][j+1]=SOLDIER;
                           switch (AddNode(t))
                           {
                                case SUCCESS:  return  SUCCESS;
                                case ADD_ONE_NODE:  next_nodes++;
                           } 
                       }
                       if(c->state[i-1][j+1]==SOLDIER)
                       {       
                           t=*c;  t.prior=c->prior;
                           t.state[i-1][j+1]=BLANK;
                           t.state[i][j]=SOLDIER;
                           switch (AddNode(t))
                           {
                                case SUCCESS:  return  SUCCESS;
                                case ADD_ONE_NODE:  next_nodes++;
                           } 
                       }
                   }
               }
               if(i<4)
               {
                   if(c->state[i][j+1]==BLANK)
                   {
                       if(c->state[i+1][j]== SOLDIER)
                       {
                           t=*c;  t.prior=c->prior;
                           t.state[i+1][j]=BLANK;
                           t.state[i][j+1]=SOLDIER;
                           switch (AddNode(t))
                           {
                                case SUCCESS:  return  SUCCESS;
                                case ADD_ONE_NODE:  next_nodes++;
                           } 
                       }
                       if(c->state[i+1][j+1]==SOLDIER)
                       {       
                           t=*c;  t.prior=c->prior;
                           t.state[i+1][j+1]=BLANK;
                           t.state[i][j]=SOLDIER;
                           switch (AddNode(t))
                           {
                                case SUCCESS:  return  SUCCESS;
                                case ADD_ONE_NODE:  next_nodes++;
                           } 
                       }
                   }
               }
           }    
   //////////////////                    
           if(i<4)
           {
               if(j>0)
               {
                   if(c->state[i+1][j]==BLANK)
                   {
                       if(c->state[i][j-1]== SOLDIER)
                       {
                           t=*c;  t.prior=c->prior;
                           t.state[i][j-1]=BLANK;
                           t.state[i+1][j]=SOLDIER;
                           switch (AddNode(t))
                           {
                                case SUCCESS:  return  SUCCESS;
                                case ADD_ONE_NODE:  next_nodes++;
                           } 
                       }
                       if(c->state[i+1][j-1]==SOLDIER)
                       {       
                           t=*c;  t.prior=c->prior;
                           t.state[i+1][j-1]=BLANK;
                           t.state[i][j]=SOLDIER;
                           switch (AddNode(t))
                           {
                                case SUCCESS:  return  SUCCESS;
                                case ADD_ONE_NODE:  next_nodes++;
                           } 
                       }
                   }
               }
               if(j<3)
               {
                   if(c->state[i+1][j]==BLANK)
                   {
                       if(c->state[i][j+1]== SOLDIER)
                       {
                           t=*c;  t.prior=c->prior;
                           t.state[i][j+1]=BLANK;
                           t.state[i+1][j]=SOLDIER;
                           switch (AddNode(t))
                           {
                                case SUCCESS:  return  SUCCESS;
                                case ADD_ONE_NODE:  next_nodes++;
                           } 
                       }
                       if(c->state[i+1][j+1]==SOLDIER)
                       {       
                           t=*c;  t.prior=c->prior;
                           t.state[i+1][j+1]=BLANK;
                           t.state[i][j]=SOLDIER;
                           switch (AddNode(t))
                           {
                                case SUCCESS:  return  SUCCESS;
                                case ADD_ONE_NODE:  next_nodes++;
                           } 
                       }
                   }
               }
           }        
                                                    
////////////////////////////////////////////////////////////////////////////////       
       }    
   }    
 return next_nodes; 
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -