POJ 2488 A Knight's Journey
2014-04-01 10:45
288 查看
题目:http://poj.org/problem?id=2488
题目就是马走‘日’字,能否不重复地走完一个棋盘,如果可以的话就按照字典序输出走棋步骤
继续水题一道(= =总是水题啊)...
开一个数组用于记录某点是否已经被访问过,再用过struct记录一下走棋步骤最后输出就行了
题目就是马走‘日’字,能否不重复地走完一个棋盘,如果可以的话就按照字典序输出走棋步骤
继续水题一道(= =总是水题啊)...
开一个数组用于记录某点是否已经被访问过,再用过struct记录一下走棋步骤最后输出就行了
#include <iostream> #include <cstring> #include <cstdio> #include <algorithm> #include <string> using namespace std; #define maxn 26 struct point { int x; int y; }way[maxn*maxn]; int vis[maxn][maxn]; int n,m; bool found; int dir[8][2] ={{-2,-1},{-2,1},{-1,-2},{-1,2},{1,-2},{1,2},{2,-1},{2,1}}; void dfs(int x,int y,int step) { way[step].x=x; way[step].y=y; if(step==n*m-1) { found=true; return ; } int fx,fy; for(int i=0;i<8;i++) { fx=x+dir[i][0]; fy=y+dir[i][1]; if(fx>=0&&fx<n&&fy>=0&&fy<m&&!vis[fx][fy]) { vis[fx][fy]=1; dfs(fx,fy,step+1); if(found) return ; vis[fx][fy]=0; } } } void print() { for(int i=0;i<n*m;i++) { printf("%c%d",way[i].x+'A',way[i].y+1); } printf("\n\n"); } int main() { //freopen("in.txt","r",stdin); int t,s; scanf("%d",&t); s=0; while(t--) { s++; scanf("%d%d",&m,&n); printf("Scenario #%d:\n", s); memset(vis,0,sizeof vis); for(int i=0;i<n;i++) { for(int j=0;j<m;j++) { found=0; vis[i][j]=true; dfs(i,j,0); if(found) break; } if(found) break; } if(found) print(); else printf("impossible\n\n"); } return 0; }
相关文章推荐
- 向android中写文件
- SVN提交版本冲突
- SIP 解析
- linux下 tar解压 gz解压 bz2等各种解压文件使用方法
- usb驱动开发18之设备生命线
- 使用TabView和ListView构建游戏中的排行榜
- Hibernate中Criteria的完整用法
- 正则表达式之语法规则
- UVa 706 LC-Display
- [ACM] poj 3128 Leonardo's Notebook (置换群,循环节)
- orcale 存储过程分页时间戳
- define中的三个特殊符号:#,##,#@
- 修复文章···
- 张广慧:云计算对游戏开发者的价值
- 我要学算法
- 索尼相机2014年或将要点开发高端机型
- EXTJS入门教程及其框架搭建
- 深度技术32位Win7系统Ghost版2014年
- [ACM] poj 3128 Leonardo's Notebook (置换群,循环节)
- 修复文章···