A Knight's Journey
来源:互联网 发布:java开发业务流程 编辑:程序博客网 时间:2024/05/29 19:22
给出n*m的棋盘,问马能否全部将棋盘遍历完,输出字典树最小的路径
#include<stdio.h>#include<iostream>#include<algorithm>#include<string.h>using namespace std;const int maxn=30;bool vis[maxn][maxn],flag;int dx[]= { -1, 1, -2, 2, -2, 2, -1, 1 };int dy[] = { -2, -2, -1, -1, 1, 1, 2, 2 };//顺序不能乱int n,m,end;char s[60];bool ok(int x,int y){ return x>=0&&x<n&&y>=0&&y<m;}void dfs(int x,int y,int cnt,char *s){ if(flag) return; if(cnt==end) { puts(s); flag=true; return; } for(int i=0;i<8;i++) { int xx=x+dx[i];int yy=y+dy[i]; if(ok(xx,yy)&&!vis[xx][yy]) { vis[xx][yy]=true; s[cnt]=yy+'A'; s[cnt+1]=xx+'1'; dfs(xx,yy,cnt+2,s); vis[xx][yy]=false; } }}int main(){ int t=0; int cas=0; scanf("%d",&t); while(t--) { printf("Scenario #%d:\n",++cas); scanf("%d%d", &n, &m); end = n * m * 2; flag = false; for (int j = 0; j < m; j++) {//先枚举列,以得到最小字典序 for (int i = 0; i < n; i++) { memset(vis, 0, sizeof(vis)); memset(s, 0, sizeof(s)); s[0] = j + 'A'; s[1] = i + '1'; vis[i][j]=true;//记得标记。。 dfs(i, j, 2, s); if (!flag) goto endloop; } } endloop: if (!flag) puts("impossible"); puts(""); }}
1 0
- A Knight's Journey
- A Knight's Journey
- A knight's journey
- A Knight's Journey
- A Knight's Journey
- A Knight's Journey
- A Knight's Journey
- A Knight's Journey
- A Knight's Journey
- A Knight's Journey
- A Knight's Journey
- A Knight's Journey
- A Knight's Journey
- A Knight's Journey
- A Knight's Journey
- A Knight's Journey
- A Knight's Journey
- pku2488 A Knight's Journey
- [TravelNotes] ZJOI 2017 DAY1 滚粗记
- woowj
- 算法作业_10(2017.3.23第五周)
- Spark商业案例与性能调优实战100课》第36课:彻底解密Spark 2.1.X中Sort Shuffle中Reducer端源码内幕.pptx>>
- 看zookeeper的事物日志
- A Knight's Journey
- leetcode198
- maven 依赖jar包的查询
- javacript中的this到底是什么
- Pandas 求余运算
- 【Anaconda】conda环境管理和包管理
- ESP8266--学习笔记(八)串口源码分析
- 从一个游戏开始看设计(三)
- golang 实现HTTP代理和反向代理