主题:新人求助,关于用C++解决西洋棋中骑士的走法
西洋棋中骑士的走法与象棋的马类似,只能横向二格,纵向一格或者横向一格,纵向两格(但是西洋棋棋子必须放在格子中),第1步有2种走法,第二步就有5种走法.今有5*5的棋盘,并将骑士的第一步放于左上角(0,0)的位置,试找出一个路径,使骑士在25步内把剩下的24个位置全部走完.输出结果时,将骑士的路径显示于的5*5的方格中,每一方格内显示出走到此方格内为第同步的数字.
我是一个初学C++的人,看到这个问题后想了很久写下了下面的这段代码但是运行不了。麻烦各位大大给我看看我哪里错了。在下不胜感激。谢谢大家了!
#include <iostream.h>
void main()
{
int a[5][5];
int sx[25],sy[25];
int i,j,n=0;
for(i=0;i<5;i++)
for(j=0;j<5;j++)
a[i][j]=0;
cout<<"这是一个游戏\n";
i=0;j=0;
while(n<25)
{
a[i][j]=1;
sx[n]=i;
sy[n]=j;
n++;
if(n==25) break;
if(i+2<5&&j+1<5&&a[i+2][j+1]==0)
{
i+=2;j+=1;continue;
}
two: if(i+2<5&&j-1>=0&&a[i+2][j-1]==0)
{
i+=2;j-=1;continue;
}
three: if(i-2>=0&&j+1<5&&a[i-2][j+1]==0)
{
i-=2;j+=1;continue;
}
four: if (i-2>=0&&j-1>=0&&a[i-2][j-1]==0)
{
i-=2;j-=1;continue;
}
five: if(i+1<5&&j+2<5&&a[i+1][j+2]==0)
{
i+=1;j+=2;continue;
}
six: if(i+1<5&&j-2>=0&&a[i+1][j-2]==0)
{
i+=1;j-=2;continue;
}
seven: if(i-1>=0&&j+2<5&&a[i-1][j+2]==0)
{
i-=1;j+=2;continue;
}
eigth: if(i-1>=0&&j-2>=0&&a[i-1][j-2]==0)
{
i-=1;j-=2;continue;
}
again: n--;
i=sx[n-1];
j=sy[n-1];
if((sx[n]-sx[n-1])==2&&(sy[n]-sy[n-1])==1)
goto two;
else if((sx[n]-sx[n-1])==2&&(sy[n]-sy[n-1])==-1)
goto three;
else if((sx[n]-sx[n-1])==-2&&(sy[n]-sy[n-1])==1)
goto four;
else if((sx[n]-sx[n-1])==-2&&(sy[n]-sy[n-1])==-1)
goto five;
else if((sx[n]-sx[n-1])==1&&(sy[n]-sy[n-1])==2)
goto six;
else if((sx[n]-sx[n-1])==1&&(sy[n]-sy[n-1])==-2)
goto seven;
else if((sx[n]-sx[n-1])==-1&&(sy[n]-sy[n-1])==2)
goto eigth;
else if((sx[n]-sx[n-1])==-1&&(sy[n]-sy[n-1])==-2)
goto again;
}
cout<<"25步的走法分别是\n";
for(i=0;i<5;i++)
for(j=0;j<5;j++)
cout<<a[i][j];
for(n=0;n<25;n++)
cout<<"第"<<n+1<<"步是:("<<sx[n]<<","<<sy[n]<<")."<<endl;
}
我是一个初学C++的人,看到这个问题后想了很久写下了下面的这段代码但是运行不了。麻烦各位大大给我看看我哪里错了。在下不胜感激。谢谢大家了!
#include <iostream.h>
void main()
{
int a[5][5];
int sx[25],sy[25];
int i,j,n=0;
for(i=0;i<5;i++)
for(j=0;j<5;j++)
a[i][j]=0;
cout<<"这是一个游戏\n";
i=0;j=0;
while(n<25)
{
a[i][j]=1;
sx[n]=i;
sy[n]=j;
n++;
if(n==25) break;
if(i+2<5&&j+1<5&&a[i+2][j+1]==0)
{
i+=2;j+=1;continue;
}
two: if(i+2<5&&j-1>=0&&a[i+2][j-1]==0)
{
i+=2;j-=1;continue;
}
three: if(i-2>=0&&j+1<5&&a[i-2][j+1]==0)
{
i-=2;j+=1;continue;
}
four: if (i-2>=0&&j-1>=0&&a[i-2][j-1]==0)
{
i-=2;j-=1;continue;
}
five: if(i+1<5&&j+2<5&&a[i+1][j+2]==0)
{
i+=1;j+=2;continue;
}
six: if(i+1<5&&j-2>=0&&a[i+1][j-2]==0)
{
i+=1;j-=2;continue;
}
seven: if(i-1>=0&&j+2<5&&a[i-1][j+2]==0)
{
i-=1;j+=2;continue;
}
eigth: if(i-1>=0&&j-2>=0&&a[i-1][j-2]==0)
{
i-=1;j-=2;continue;
}
again: n--;
i=sx[n-1];
j=sy[n-1];
if((sx[n]-sx[n-1])==2&&(sy[n]-sy[n-1])==1)
goto two;
else if((sx[n]-sx[n-1])==2&&(sy[n]-sy[n-1])==-1)
goto three;
else if((sx[n]-sx[n-1])==-2&&(sy[n]-sy[n-1])==1)
goto four;
else if((sx[n]-sx[n-1])==-2&&(sy[n]-sy[n-1])==-1)
goto five;
else if((sx[n]-sx[n-1])==1&&(sy[n]-sy[n-1])==2)
goto six;
else if((sx[n]-sx[n-1])==1&&(sy[n]-sy[n-1])==-2)
goto seven;
else if((sx[n]-sx[n-1])==-1&&(sy[n]-sy[n-1])==2)
goto eigth;
else if((sx[n]-sx[n-1])==-1&&(sy[n]-sy[n-1])==-2)
goto again;
}
cout<<"25步的走法分别是\n";
for(i=0;i<5;i++)
for(j=0;j<5;j++)
cout<<a[i][j];
for(n=0;n<25;n++)
cout<<"第"<<n+1<<"步是:("<<sx[n]<<","<<sy[n]<<")."<<endl;
}