课程设计,大侠帮忙改下啊!!!
问题描述:在9*11的中国象棋棋盘的任意位置放只马,该马能够无重复的走完棋盘的每一个位置,并输出路线
。或者那位大侠给我一个算法。我的错的太离谱了。
#define N 9
#include<math.h>
#include<stdio.h>
int oldmap[N][N+2]; //递归用的数组,用全局变量节约时间
int yes=0; //yes是判断是否找到路的标志,1找到,0没找到
int way[200][2],wayn=0;//way数组是显示路线用的,wayn是统计走了几个格子
void waycopy(int (*x)[N] ,int (*y)[N+2]);
//为了8个方向的递归,把原路线拷贝给新数组
int Findway(int (*x)[N],int i,int j);//自动探索函数
void main()
{
int map[N][N+2];//递归用的数组,用全局变量节约时间
int x,y;
clrscr();
printf("\nplease two number:\n");
scanf("%d,%d",&a,&b);
if(x<1||x>N||y<1||y>N+2)
printf("\nError:out of number\n");
int count=0;
void waycopy(int (*oldmap[N],int (*map)[N])
//拷贝棋盘
{
int i,j;
for(i=0;i<N;i++)
for(j=0;j<N+2;j++)
oldmap[i][j]=map[i][j];
}
//递归找路
int Findway(int (*map)[N],int i,int j)
{
if(count==99)
{
yes=1;
return;
}
map[i][j]=1;//走过的地方变为1
waycopy(oldmap,map);//拷贝棋盘
if(!yes&&x>=1&&x<=8&&&y>=1&&y<=11)//判断右上方是否可走
{
Findway(oldmap,i+2,j+1);
count++;
if(yes)
{
way[wayn][0]=i;
way[wayn++][1]=j;
return;
}
}
waycopy(oldmap,map);
if(!yes&&x>=1&&x<=9&&y>=1&&y<=10)//判断上右方是否可走
{
Findway(oldmap,i+1,y+2);
count++;
if(yes)
{
way[wayn][0]=i;
way[wayn++][1]=j;
return;
}
}
waycopy(oldmap,map);
if(!yes&&x>=2&&x<=10&&y>=1&&y<=10)//判断上左方是否可走
Findway(oldmap,i-1,j+2);
count++;
if(yes)
{
way[wayn][0]=i;
way[wayn++][1]=j;
return;
}
}
waycopy(oldmap,map);
if(!yes&&x>=3&&x<=10&&y>=1&&y<=11);//判断左上方是否可走
Findway(oldmap,i-2,j+1);
count++;
if(yes)
{
way[wayn][0]=i;
way[wayn++][1]=j;
return;
}
}
waycopy(oldmap,map);
if(!yes&&x>=3&&x<=10&&y>=2&&y<=12);//判断左下方是否可走
Findway(oldmap,i-2,y-1);
count++;
if(yes)
{
way[wayn][0]=i;
way[way++][1]=j;
return;
}
}
waycopy(oldmap,map);
if(!yes&&x>=2&&x<=10&&y>=3&&y<=12);//判断下左方是否可走
Findway(oldmap,i-1,j-2);
count++;
if(yes)
{
way[wayn][0]=i;
way[wayn++][1]=j;
return;
}
}
waycopy(oldmap,map);
if(!yes&&x>=1&&x<=9&&y>=3&&y<=12);//判断下右方是否可走
Findway(oldmap,i+1,j-2);
count++;
if(yes)
{
way[wayn][0]=i;
way[wayn++][1];
return;
}
}
waycopy(oldmap,map);
if(!yes&&x>=1&&x<=8&&y>=2&&y<=12);//判断右下方是否可走
Findway(oldmap,i+2,j-1);
count++;
if(yes)
{
way[wayn][0]=i;
way[wayn++][1]=j;
return;
}
}
getch();
}