|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
本帖最后由 慕容紫小英 于 2020-4-7 08:54 编辑
这是我自己写的代码,编译没有问题
- #include <stdio.h>
- int stop(int (*knight)[8]);
- int check(int i,int j,int (*knight)[8]);
- void tour(int i,int j,int step,int (*knight)[8]);
- int stop(int (*knight)[8])//判断停止条件,当棋盘都被填满则停止
- {
- int i,j;
- for(i = 0;i < 8;i++)
- {
- for(j = 0;j < 8;j++)
- {
- if(knight[i][j] == 0)
- {
- return 1;
- }
- }
- }
- return 0;
- }
- void tour(int i,int j,int step,int (*knight)[8])//决定下一步
- {
- int t;
- t = check(i,j,knight);//先进行检查
-
- if(t = 0)//不可进行下一步则直接结束
- {
- return;
- }
-
- switch(t)
- {
- case 1:i -= 2,j -= 1;
- case 2:i -= 2,j += 1;
- case 3:i -= 1,j += 2;
- case 4:i += 1,j += 2;
- case 5:i += 2,j += 1;
- case 6:i += 2,j -= 1;
- case 7:i += 1,j -= 2;
- case 8:i -= 1,j -= 2;
- }
- knight[i][j] = ++step;
- tour(i,j,step,knight);
- }
- int check(int i,int j,int (*knight)[8])//检查knight[i][j]是否可以进行下一步
- {
- int m,n,k;
- for(k = 1;k < 9;k++)
- {
- m = i,n = j;
- switch(k)
- {
- case 1:m -= 2,n -= 1;
- case 2:m -= 2,n += 1;
- case 3:m -= 1,n += 2;
- case 4:m += 1,n += 2;
- case 5:m += 2,n += 1;
- case 6:m += 2,n -= 1;
- case 7:m += 1,n -= 2;
- case 8:m -= 1,n -= 2;
- }
- if(knight[m][n] == 0)//如果可以,则函数返回k值
- {
- return k;
- }
- }
-
- return 0;//不能进行下一步则返回0
- }
- int main()
- {
- int i,j,row,col,step = 1;
- int knight[8][8];
-
- for(i = 0;i < 8; i++)
- {
- for(j = 0;j < 8; j++)
- {
- knight[i][j] = 0;
- }
- }
- printf("请输入起始的位置(例如第1行第1列):");
- scanf("第%d行第%d列",&row,&col);
- knight[row-1][col-1] = step;
-
- while(stop(knight))//用stop函数控制循环结束
- {
- tour(row-1,col-1,step,knight);
- }
- for(i = 0;i < 8;i++)
- {
- for(j = 0;j < 8;j++)
- {
- printf("%d ",knight[i][j]);
- }
- }
- return 0;
- }
复制代码
但运行很多次都是这个结果
我自己找不出原因了
希望大佬们可以帮我看看,感激不尽
|
|