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

📄 unit1.~cpp

📁 运用回溯法编写了国际跳棋的程序.并且考虑了对称性快速得出所有答案.
💻 ~CPP
📖 第 1 页 / 共 2 页
字号:
            Form1->Shape54->Brush->Color=clYellow;
            Form1->Shape54->Repaint();
            Form1->Shape55->Brush->Color=clYellow;
            Form1->Shape55->Repaint();
            Form1->Shape56->Brush->Color=clYellow;
            Form1->Shape56->Repaint();
            Form1->Shape57->Brush->Color=clYellow;
            Form1->Shape57->Repaint();
            Form1->Shape63->Brush->Color=clYellow;
            Form1->Shape63->Repaint();
            Form1->Shape64->Brush->Color=clYellow;
            Form1->Shape64->Repaint();
            Form1->Shape65->Brush->Color=clYellow;
            Form1->Shape65->Repaint();
            Form1->Shape73->Brush->Color=clYellow;
            Form1->Shape73->Repaint();
            Form1->Shape74->Brush->Color=clYellow;
            Form1->Shape74->Repaint();
            Form1->Shape75->Brush->Color=clYellow;
            Form1->Shape75->Repaint();
}
void tiaoqi(int n)
{
  FILE *file1;
  int m,buf,n1,l1,n2,l2,midx,midy,b1,b2,b3;
  string s1;
  s1="";
  char tempbuf[512];
  file1=fopen("d:/1.txt","a+");
  int find=0;
  k=1;    //指示路径存放下标及 k可记录吃掉的棋子
  i=0;
  j=0;
  while(k>0)
   {
     while (i<7)
     {
      while (j<7)
      {  if (s[i][j]==1)
          {if ((j>=3)&&(s[i][j-1]==1)&&(s[i][j-2]==0))     // 横向从右向左跳动
             { s[i][j]=0;
               s[i][j-1]=0;  s[i][j-2]=1;
               way[k][1].x=i; way[k][1].y=j-2;
               way[k][0].x=i; way[k][0].y=j;
               k++;
               i=0;
               j=0;
               }
           else
            if ((i<=5)&&(s[i+1][j]==1)&&(s[i+2][j]==0))     // 纵向从上向下跳动
                { s[i][j]=0;
                s[i+1][j]=0;   s[i+2][j]=1;
                way[k][1].x=i+2; way[k][1].y=j;
                way[k][0].x=i; way[k][0].y=j;
                k++;
                i=0;
                j=0;
                 }
            else
            if ((j<=5)&&(s[i][j+1]==1)&&(s[i][j+2]==0))    // 横向从左向右跳动
                { s[i][j]=0;
                  s[i][j+1]=0;   s[i][j+2]=1;
                  way[k][1].x=i; way[k][1].y=j+2;
                  way[k][0].x=i; way[k][0].y=j;
                  k++;
                  i=0;
                  j=0;
                }
               else
               if ((i>=3)&&(s[i-1][j]==1)&&(s[i-2][j]==0))     // 纵向从下向上跳动
                { s[i][j]=0;
                  s[i-1][j]=0;   s[i-2][j]=1;
                  way[k][1].x=i-2; way[k][1].y=j;
                  way[k][0].x=i; way[k][0].y=j;
                  k++;
                  i=0;
                  j=0;
                  }
                else  j++;        //有棋子但不能跳动
             }       //有棋子结束
          else  j++;       // 没有棋子
          }
         i++; j=0;      //换行
       }
     if ((k==31)&&(s[3][3]==1))
         {
          count1++;
          snprintf(tempbuf,sizeof(tempbuf)," \n\n this is the %d way  : \n",count1);
          s1 =tempbuf;
          fwrite(s1.c_str(),s1.size(),1,file1);
          for(m=0;m<31;m++)
            {
             n1=way[m][0].x;  l1=way[m][0].y;     //起点
             n2=way[m][1].x;  l2=way[m][1].y;     //终点
             snprintf(tempbuf,sizeof(tempbuf)," {[%d,%d] to [%d,%d]};",n1,l1,n2,l2);    //输出到文本
             s1 =tempbuf;
             fwrite(s1.c_str(),s1.size(),1,file1);
             n1++;  l1++;     //起点显示
             b1=n1*10+l1;
            changecolor(b1);
             Sleep(1000);
             n2++;  l2++;     //终点显示
             b2=n2*10+l2;
             changecolor(b2);
             Sleep(1000);
             midx=(n1+n2)/2;       //中间点显示
             midy=(l1+l2)/2;
             b3=midx*10+midy;
             changecolor(b3);
             Sleep(1000);
             //ShowMessage("adfgds");
             }
            Sleep(2000);
            qipancolor();
            Sleep(2000);
          k--; find=1;
          }
      if (find==1) {k++;    find=0;}
      if (k>1)
          {  k--;
             s[way[k][1].x][way[k][1].y]=0;     //还原棋子
             s[way[k][0].x][way[k][0].y]=1;
             s[(way[k][1].x+way[k][0].x)/2][(way[k][1].y+way[k][0].y)/2]=1;
             i=way[k][0].x;
             j=way[k][0].y;
             if (j<6) j++;             //指向下一位置
                else if (i<6)
                  { i++; j=0; }
             way[k][1].x=-1; way[k][1].y=-1;         //取消路径
             way[k][0].x=-1; way[k][0].y=-1;
             }
          else k--;
   }                //do矩阵一轮遍历结束
   fclose(file1);
}


void __fastcall TForm1::BitBtn1Click(TObject *Sender)
{
   count1=0;                  //用来记录找到的方案数 
    for (i=0;i<7;++i)        //初始化矩阵
       for (j=0;j<7;++j)
            s[i][j]=1;
  s[3][3]=0;  s[0][6]=-1;
  s[1][6]=-1; s[0][5]=-1;
  s[1][5]=-1; s[6][6]=-1;
  s[5][6]=-1; s[6][5]=-1;
  s[5][5]=-1; s[0][0]=-1;
  s[1][0]=-1; s[0][1]=-1;
  s[1][1]=-1; s[6][0]=-1;
  s[5][0]=-1; s[6][1]=-1;
  s[5][1]=-1;
  s[3][5]=0;             //第三种移动 横向从右向左跳动
  s[3][4]=0;  s[3][3]=1;
   for (i=0;i<31;++i)         //第一个已放入,初始化路径
   for (j=0;j<2;++j)
   {
    way[i][j].x=-1;
    way[i][j].y=-1;
    }
  way[0][0].x=3; way[0][0].y=5;
  way[0][1].x=3; way[0][1].y=3;
  tiaoqi(31);



    for (i=0;i<7;++i)        //初始化矩阵
       for (j=0;j<7;++j)
            s[i][j]=1;
  s[3][3]=0;  s[0][6]=-1;
  s[1][6]=-1; s[0][5]=-1;
  s[1][5]=-1; s[6][6]=-1;
  s[5][6]=-1; s[6][5]=-1;
  s[5][5]=-1; s[0][0]=-1;
  s[1][0]=-1; s[0][1]=-1;
  s[1][1]=-1; s[6][0]=-1;
  s[5][0]=-1; s[6][1]=-1;
  s[5][1]=-1;
  s[1][3]=0;             //第一种移动  纵向从上向下跳动
  s[2][3]=0;  s[3][3]=1;
   for (i=0;i<31;++i)         //第一个已放入,初始化路径
   for (j=0;j<2;++j)
   {
    way[i][j].x=-1;
    way[i][j].y=-1;
    }
  way[0][0].x=1; way[0][0].y=3;
  way[0][1].x=3; way[0][1].y=3;
  tiaoqi(31);          //调用跳棋函数;



   for (i=0;i<7;++i)        //初始化矩阵
       for (j=0;j<7;++j)
            s[i][j]=1;
  s[3][3]=0;  s[0][6]=-1;
  s[1][6]=-1; s[0][5]=-1;
  s[1][5]=-1; s[6][6]=-1;
  s[5][6]=-1; s[6][5]=-1;
  s[5][5]=-1; s[0][0]=-1;
  s[1][0]=-1; s[0][1]=-1;
  s[1][1]=-1; s[6][0]=-1;
  s[5][0]=-1; s[6][1]=-1;
  s[5][1]=-1;
  s[3][1]=0;             //第二种移动   横向从左向右跳动
  s[3][2]=0;  s[3][3]=1;
   for (i=0;i<31;++i)         //第一个已放入,初始化路径
   for (j=0;j<2;++j)
   {
    way[i][j].x=-1;
    way[i][j].y=-1;
    }
  way[0][0].x=3; way[0][0].y=1;
  way[0][1].x=3; way[0][1].y=3;
  tiaoqi(31);



  for (i=0;i<7;++i)        //初始化矩阵
       for (j=0;j<7;++j)
            s[i][j]=1;
  s[3][3]=0;  s[0][6]=-1;
  s[1][6]=-1; s[0][5]=-1;
  s[1][5]=-1; s[6][6]=-1;
  s[5][6]=-1; s[6][5]=-1;
  s[5][5]=-1; s[0][0]=-1;
  s[1][0]=-1; s[0][1]=-1;
  s[1][1]=-1; s[6][0]=-1;
  s[5][0]=-1; s[6][1]=-1;
  s[5][1]=-1;
  s[5][3]=0;             //第四种移动  纵向从下向上跳动
  s[4][3]=0;  s[3][3]=1;
   for (i=0;i<31;++i)         //第一个已放入,初始化路径
   for (j=0;j<2;++j)
   {
    way[i][j].x=-1;
    way[i][j].y=-1;
    }
  way[0][0].x=5; way[0][0].y=3;
  way[0][1].x=3; way[0][1].y=3;
  tiaoqi(31);



}

//---------------------------------------------------------------------------

⌨️ 快捷键说明

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