首页 > 代码库 > 马踏棋盘递归所有解
马踏棋盘递归所有解
这次马踏棋盘是用递归实现的,而且可以弄出来所有解,当时电脑跑的最快的都有40多万解了,这个也可以看你电脑cpu好坏,一般超级本跑不动。这是实际上和八皇后是同一种性质的问题,都用到了回溯的思想,有接进行下一个,不行了退回去,在进行尝试。不多说了,直接上代码;
#include<stdio.h> #include <stdlib.h> #include<conio.h> #define N 8 int cnt=1; // 记录马的位置 int n=1; int chess[8][8]={0}; //棋盘 int move[8][2]={ {1,-2},{2,-1}, {2,1},{1,2}, {-1,2},{-2,1}, {-2,-1},{-1,-2} }; void horse(int ,int ); void printhorse(); int main() //主函数 { chess[0][0]=1; horse(0,0); return 0; } void horse(int x,int y) //执行过程 { int i; int a,b; for(i=0;i<N;i++) { a=x+move[i][0]; b=y+move[i][1]; if(a>=0&&a<N&&b>=0&&b<N&&!chess[a][b]) { chess[a][b]=++cnt; if(cnt<64) { horse(a,b); } // 递归 else{ printhorse(); // exit(0); } chess[a][b]=0;//修改ab的值归为0 cnt--; } } } void printhorse() //输出马踏棋盘 { int i,j; printf("输出第%d组解:\n",n++); for(i=0;i<N;i++) { for(j=0;j<N;j++) printf("%3d ",chess[i][j]); printf("\n"); } }
演示结果
马踏棋盘递归所有解
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。