HDU - 2181 dfs [kuangbin带你飞]专题二
2017-02-14 16:58
169 查看
保存每个节点的下一个节点一直往下面走就行了,不能重复经过某个点,当经过的点达到20个而且当前节点的下一个节点是起点就打印答案。
AC代码
如有不当之处欢迎指出!
AC代码
#include<cstdio> #include<vector> #include<cstring> #include<algorithm> using namespace std; const int maxn = 25; int vis[maxn]; vector<int>v[25]; int ans[maxn], num, m; void print() { printf("%d: ", num); for(int i = 0; i < 20; ++i) printf(" %d", ans[i]); printf(" %d\n", m); } void dfs(int u, int cnt) { ans[cnt] = u; if(cnt == 19) { int flag = 0; for(int i = 0; i < 3; ++i){ if(v[u][i] == m) flag = 1; } if(flag) { num++; print(); } return; } if(cnt >= 20) return; vis[u] = 1; for(int i = 0; i < 3; ++i) { if(vis[v[u][i]]) continue; dfs(v[u][i], cnt + 1); } vis[u] = 0; } int main(){ int a[3]; for(int i = 1; i <= 20; ++i) { v[i].clear(); for(int j = 0; j < 3; ++j){ scanf("%d", &a[j]); v[i].push_back(a[j]); } sort(v[i].begin(), v[i].end()); //确保字典序最小 } while(scanf("%d", &m) == 1 && m) { memset(vis, 0, sizeof(vis)); num = 0; dfs(m, 0); } return 0; }
如有不当之处欢迎指出!
相关文章推荐
- [kuangbin带你飞]专题二 搜索进阶 C - 哈密顿绕行世界问题(HDU 2181)
- HDU 1272 小希的迷宫(kuangbin带你飞 专题五:并差集)
- [kuangbin带你飞]专题1 简单搜索 L - Oil Deposits HDU - 1241
- hdu 1272 小希的迷宫[kuangbin带你飞]专题五 并查集
- [kuangbin带你飞]专题十六 KMP & 扩展KMP & Manacher A HDU 1711
- [kuangbin带你飞]专题一 简单搜索 M HDU 1495
- [kuangbin带你飞]专题1 简单搜索 N - Find a way HDU - 2612
- [kuangbin带你飞]专题十六 KMP & 扩展KMP & Manacher B HDU 1686
- HDU 1241 Oil Deposits(kuangbin带你飞 专题一:基础搜索)
- [kuangbin带你飞]专题一 简单搜索 N HDU 2612
- [kuangbin带你飞]专题一 简单搜索 M - 非常可乐 HDU 1495
- [kuangbin带你飞]专题一 简单搜索 Find The Multiple :dfs
- [kuangbin带你飞]专题五 并查集 D HDU 3038
- hdu 1875 畅通工程再续(kuangbin带你飞 专题六:最小生成树)
- [kuangbin带你飞]专题六 最小生成树 N HDU 1875
- [kuangbin带你飞]专题七 线段树 A HDU 1166
- HDU - 3001 Travelling 状压dp + 三进制 [kuangbin带你飞]专题二
- [kuangbin带你飞]专题十六 KMP & 扩展KMP & Manacher C HDU 2087
- [kuangbin带你飞]专题十六 KMP & 扩展KMP & Manacher J HDU 2594
- HDU - 3085 双向BFS + 技巧处理 [kuangbin带你飞]专题二