POJ 2488 A Knight's Journey【DFS】
2016-03-21 20:33
531 查看
补个很久之前的题解。。。。
题目链接:
http://poj.org/problem?id=2488题意:
马走“日”字,让你为他设计一条道路,走遍所有格,并输出字典序最小的一条。分析:
dfs~~~代码:
#include<iostream> #include<cstring> #include<algorithm> using namespace std; typedef pair<int, int>pii; const int maxn = 70; pii pa[maxn],dr[10]; int v[maxn][maxn]; int r[8]={-1,1,-2, 2,-2,2,-1,1}; int d[8]={-2,-2,-1,-1,1, 1,2,2}; int n,p,q; bool cmp(pii a, pii b) { if(a.first == b.first) return a.second < b.second; else return a.first < b.first; } int dfs(int cnt, int a, int b) { pa[cnt++] = make_pair(a, b); v[a][b]=1; if(cnt == p*q){ for(int i = 0; i < cnt; i++) cout<<(char)(pa[i].first+'A')<<pa[i].second+1; cout<<endl<<endl; return 1; } int k = 0, na, nb; for(int i = 0; i < 8; i++){ na = a + d[i], nb = b+ r[i]; if(v[na][nb]==0&&0 <= na && na < q && 0 <= nb && nb < p){ if(dfs(cnt, na, nb)) return 1; v[na][nb]=0; } } v[a][b]=0; return 0; } int main (void) { cin>>n; for(int i = 0; i < n; i++){ memset(v, 0, sizeof(v)); cin>>p>>q; cout<<"Scenario #"<<i+1<<":"<<endl; if(!dfs(0, 0, 0)) cout<<"impossible"<<endl<<endl; } return 0; }
相关文章推荐
- 关于Android的网络连接ConnectivityManager
- C# 版本 支付
- POJ 2488 A Knight's Journey【DFS】
- 来自HQ的满满的恶意
- 质因中位数
- Apache使用localhost可以访问但使用本机IP(局域网)不能访问
- Android 多线程下载
- Spring框架中的定时器 如何使用和配置
- 基础容器的常用接口
- 作业4词频统计
- 【android】Adapter 的 convertView 复用浅析
- Android的WoWoViewPager动画库
- 动态规划---最长上升子序列问题(O(nlogn),O(n^2))
- CSS overflow 属性
- 网易在线编程题
- Android中dip、dp、sp、pt和px的区别
- Android如何处理SVG文件
- Android 之自定义控件样式在drawable文件夹下的XML实现
- activity中onSaveInstanceState方法调用时机详解
- 数据库连接工具类BaseDao