华扬太阳能价格:麻烦大家看看我的马踏棋盘,为什么有个点跳不到啊!

来源:百度文库 编辑:查人人中国名人网 时间:2024/05/14 03:24:51
#include <stdio.h>
#define cheboxrow 8
#define FALSE 0
#define TRUE 1
#define cheboxnum cheboxrow*cheboxrow
int horsejump(int i,int j,int chebox[][cheboxrow],int horstep)
{
if((++horstep==cheboxnum)&&chebox[i][j]==0)
{
chebox[i][j]=horstep;
return TRUE;
}
if(i<0||i>=cheboxrow||j<0||j>=cheboxrow||chebox[i][j]!=0)
{
horstep--;
return FALSE;
}
chebox[i][j]=horstep;
if(horsejump(i-1,j+2,chebox,horstep))
return TRUE;
else
if(horsejump(i-1,j-2,chebox,horstep))
return TRUE;
else
if(horsejump(i+1,j+2,chebox,horstep))
return TRUE;
else
if(horsejump(i+1,j-2,chebox,horstep))
return TRUE;
else
if(horsejump(i-2,j+1,chebox,horstep))
return TRUE;
else
if(horsejump(i-2,j-1,chebox,horstep))
return TRUE;
else
if(horsejump(i+2,j+1,chebox,horstep))
return TRUE;
else
if(horsejump(i+2,j-1,chebox,horstep))
return TRUE;
else{
chebox[i][j]=0;
horstep--;
return FALSE;
}
}
void main()
{
int startx,starty,horstep=0,tempx,tempy;
int chebox[cheboxrow][cheboxrow];
for(tempx=0;tempx<cheboxrow;tempx++)
for(tempy=0;tempy<cheboxrow;tempy++)
chebox[tempx][tempy]=0;
printf("现在是马踏棋盘游戏,规格为8*8形式!\n");
printf("请输入起始坐标startx,starty,用逗号隔开,范围在0-7之间:\n");
scanf("%d,%d",&startx,&starty);
if(horsejump(startx,starty,chebox,horstep))
for(tempx=0;tempx<cheboxrow;tempx++)
{
for(tempy=0;tempy<cheboxrow;tempy++)
printf("%3d",chebox[tempx][tempy]);
printf("\n");
}
else {
printf("对不起,程序出现问题!");
}

}

if((++horstep==cheboxnum)&&chebox[i][j]==0)
{
chebox[i][j]=horstep;
return TRUE;
}
if(i<0||i>=cheboxrow||j<0||j>=cheboxrow||chebox[i][j]!=0)
{
horstep--;
return FALSE;
}
这两句的问题
应该先判断非法的条件,再判断符合的条件
否则,举个例子
当算到64步时,i=2,j=9
如果照你那么写,就返回true了
所以上面两句应该写成
if(i<0||i>=cheboxrow||j<0||j>=cheboxrow||chebox[i][j]!=0)
{
horstep--;
return FALSE;
}

if((++horstep==cheboxnum)&&chebox[i][j]==0)
{
chebox[i][j]=horstep;
return TRUE;
}
我运行正确
但速度实在是太慢了
得有点耐心多等一会
运行结果:
现在是马踏棋盘游戏,规格为8*8形式!
请输入起始坐标startx,starty,用逗号隔开,范围在0-7之间:
0,0
1 10 19 64 3 12 21 24
28 63 2 11 20 23 4 13
9 18 27 30 5 14 25 22
62 29 8 17 26 31 6 15
45 48 61 38 7 16 41 32
60 37 46 49 42 39 56 53
47 44 35 58 51 54 33 40
36 59 50 43 34 57 52 55
Press any key to continue