poj 2488 dfs(骑士环游世界)
来源:互联网 发布:ios 网络图片高斯模糊 编辑:程序博客网 时间:2024/04/28 17:53
这是我在新浪写的第一篇博文了吧,嘿嘿,把它也贴过来。一个经典的dfs。
#include<iostream>using namespace std;#define max 26int dir[8][2]={{-1,-2},{1,-2},{-2,-1},{2,-1},{-2,1},{2,1},{-1,2},{1,2}};//定义八个方向 因为要按字典树输出 //棋盘应该是按照下面形式分布的(因为这样符合数组的情况)//所以yy[max]是存的字母 那就是“尽量优先往左上跳” (纵坐标尽量小的情况小横坐标尽量小)//则方向数组这样写 int map[max][max],xx[max],yy[max],p,q,step,flag;//路径,X坐标,Y坐标,长,宽,步数,成功标志void dfs(int i,int j){ //printf("%d %d\n",i,j); int x,y; if(flag) return; xx[step]=i; yy[step]=j; step++;//走的步数 map[i][j]=1; if((step-1)==p*q)//如果遍历的棋盘,则返回 并且成功标记=1 {flag=1;return;} for(int k=0;k<8;k++) { x=i+dir[k][0]; y=j+dir[k][1]; //printf("%d %d"); //system("pause"); //如果不越界 则按条件继续搜索 if(!map[x][y]&&x>=1&&x<=p&&y>=1&&y<=q) { dfs(x,y); step--; } } map[i][j]=0;}int main(){ int t,h=0; cin>>t; while(t--) { cin>>p>>q; h++; flag=0; step=1; memset(map,0,sizeof(map)); dfs(1,1); if(flag) { printf("Scenario #%d:\n",h); for(int i=1;i<=p*q;i++) { printf("%c%d",yy[i]+64,xx[i]); //输出每一步跳过的位置 } cout<<endl<<endl; } else { printf("Scenario #%d:\n",h); printf("impossible\n\n"); } } return 0;}
- poj 2488 dfs(骑士环游世界)
- 环游世界
- ---45块环游世界---
- 免费环游世界
- 暖暖环游世界
- poj 2488 骑士游历
- POJ 2488 A Knight's Journey(DFS——骑士周游问题)
- poj 2488 A Knight's Journey 【骑士周游 dfs + 记忆路径】
- 最想环游的世界
- 2055: 80人环游世界
- HDU2181 哈密顿世界环游
- bzoj2055 80人环游世界
- poj 2488 骑士的旅行
- 30岁前,环游世界220天
- Google Earth和虚拟环游世界
- Virtual Active:跑步机上环游世界
- xoj 1754 80人环游世界
- XYLX 10.19 环游世界(travel)
- Python实现网络爬虫
- [转]C语言,指针与内存分配
- vim点滴
- heu 1010 dfs (木棍)
- C++中的vector使用
- poj 2488 dfs(骑士环游世界)
- poj 2386 dfs(水坑数)
- poj 1915 bfs(骑士移动)
- poj 2243 bfs(还是骑士移动)
- poj 3278 bfs(Catch That Cow)
- poj 1011 dfs
- poj 1190 dfs(生日蛋糕)
- VC调用CMD命令通过控制台管道获取输出结果
- poj 1915 第一个双向BFS