DFS解马走日问题
来源:互联网 发布:管家婆软件服务电话 编辑:程序博客网 时间:2024/05/22 23:59
问题描述
搜索过程是从(0,0)出发,按照深度优先的原则,从8个方向中尝试一个可以走的点,直到尝试过所有的方向,走完棋盘上的所有点,得出所有的解。
在n*n的棋盘中,马只能走"日"字。马从位置(0,0)出发,把棋盘的每一格都走一次且只走一次。找出所有路径。 5*5的棋盘上,有304种解。
搜索过程是从(0,0)出发,按照深度优先的原则,从8个方向中尝试一个可以走的点,直到尝试过所有的方向,走完棋盘上的所有点,得出所有的解。
马走日问题可以看成是在层数为n*n的8叉树中,找出所有的解。
#include "stdio"int N =5;//棋盘大小为5*5int martic[N][N];//代表棋盘的数组int count = 0;//走的步数int solution = 0;//方法数量int step[8][2] = {{-1,-2},{-2,-1}, {-2,1},{-1,2},{1,2},{2,1},{2,-1},{1,-2}};//要走的八个方向int isok(int x,int y)//判断这一步是否符合规则{if ((x>=0&&x<N&&y>=0&&y<N&&martic == 0)){return true;}else{return false;}}void display()//如果整个棋盘已经走满,就输出整个棋盘{printf("the %d solution:\n",++solution);for(int i = 0;i < N;i++){for(int j = 0;j < N;j++){printf("%d ",martic[i][j]);}printf("\n");}}void DFS(int x,int y){int nextx,nexty;for (int i = 0; i < 8; ++i){nextx = x + step[i][0];nexty = y + step[i][1];if (isok(nextx,nexty))//发现{if (count != (N*N-1)){count++;martic[nextx][nexty] = count;DFS(nextx,nexty);//递进 和 回溯martic[nextx][nexty] = 0;count--;}else{display();//满足条件,输出}}}}int int main(int argc, char const *argv[]){count = 1;martic[0][0] = 1;DFS(0,0);return 0;}
0 0
- DFS解马走日问题
- DFS问题
- 八皇后问题(DFS)
- poj1321(dfs棋盘问题)
- DFS 问题集锦
- 棋盘问题 DFS+回溯
- 经典迷宫问题DFS
- DFS 解 滑雪问题
- DFS 部分和问题
- 棋盘问题 DFS
- 黑白图像问题[DFS]
- 八皇后问题 DFS
- poj1321 棋盘问题 dfs
- 迷宫问题 POJ dfs
- N皇后问题【DFS】
- DFS解数独问题
- 迷宫问题的DFS
- 迷宫问题DFS
- IE兼容性开发的笔记
- 安装autoconf, automake, 以及 libtool
- 62 pthread
- 黑马程序员——Java基础---多线程
- 【JavaMail开发总结】注意事项
- DFS解马走日问题
- 1.初探Surface Shader背后的机制
- [ZOJ 3646]Matrix Transformer[二分图匹配]
- Linux前台进程的实现
- C#回调函数
- gcc 多次调用scanf %c时,"\n"引发的程序异常
- 浅谈单片机程序设计中的“分层思想”
- 数据库三种范式的理解
- linux下epoll如何实现高效处理百万句柄的