HDU 2181 哈密顿绕行世界问题 (DFS)
2015-09-09 19:51
447 查看
题目链接:哈密顿绕行世界问题
解析:将每个点的相邻三个点按字典序存放,直接dfs即可。
AC代码:
解析:将每个点的相邻三个点按字典序存放,直接dfs即可。
AC代码:
#include <bits/stdc++.h> using namespace std; int city[30][5]; int vis[30]; int pre[30]; int m; int cnt; void print_ans(int cur){ if(cur != m){ print_ans(pre[cur]); printf(" %d", cur); } } void dfs(int now, int step){ if(step < 20 && vis[m]) return ; if(now == m && step == 20){ printf("%d: %d", ++cnt, m); print_ans(pre[m]); printf(" %d\n", m); return ; } for(int i=0; i<3; i++){ int tp = city[now][i]; if(!vis[tp]){ vis[tp] = true; pre[tp] = now; dfs(tp, step+1); vis[tp] = false; //搜完要恢复标记。。。 } } } int main(){ #ifdef sxk freopen("in.txt", "r", stdin); #endif //sxk int a, b, c; for(int i=1; i<=20; i++){ scanf("%d%d%d", &a, &b, &c); if(b > c) swap(b, c); //手动排序 if(a > b) swap(a, b); if(b > c) swap(b, c); city[i][0] = a, city[i][1] = b, city[i][2] = c; } while(scanf("%d", &m) == 1 && m){ memset(vis, false, sizeof(vis)); memset(pre, 0, sizeof(pre)); cnt = 0; dfs(m, 0); } return 0; }
相关文章推荐
- 实验三 敏捷开发与XP实践
- LeetCode----First Missing Positive
- mysql 数据库远程批量更新脚本(部份参考)
- 学习历程
- Spring Data中手动实现Repository方法
- 教你快速高效接入SDK——服务器端支付回调的处理方式
- 感悟~勿忘初心
- Ubuntu Eclipse for C++ 11
- POJ 1985 Cow Marathon(求树的直径)
- Count and Say
- iOSInterviewQuestions/iOS面试问题
- codevs 3147 3147 矩阵乘法 2
- struts2的constant配置
- 为什么开始
- 菜鸟系列——双连通分量
- https
- https
- 【docker】正式开始容器之旅
- 一元函数对象的使用例子(续)
- 分糖果