uva 10557 - XYZZY
2013-06-25 14:18
423 查看
虽然说AC了,但是还是不太懂,参考了他人的代码,有点烦,仔细点其实不算太难。
#include <iostream> #include <cstdio> #include <cstring> using namespace std; struct room {int energy,doorways[120],num_doorways,last_energy;}; room r[120]; int n; bool is_vis[120]; bool dfs(int pos) { if(is_vis[pos])return false; if(pos == n)return true; is_vis[pos] = true; for(int i = 0; i < r[pos].num_doorways;i++) if(dfs(r[pos].doorways[i])) return true; return false; } bool ddfs(int pos, int energy) { if(energy <= 0) return false; if(pos == n) return true; if(r[pos].last_energy != -1) {if(energy > r[pos].last_energy) { memset(is_vis, 0, sizeof(is_vis)); if(dfs(pos)) return true; } return false;} r[pos].last_energy = energy; for(int i = 0; i < r[pos].num_doorways; i++) { int pos_room_new = r[pos].doorways[i]; if(ddfs(pos_room_new, energy + r[pos_room_new].energy)) return true; } return false; } int main() { while(scanf("%d", &n), n!=-1) { for(int i = 1; i <= n; i++) { scanf("%d%d", &r[i].energy, &r[i].num_doorways); for(int j = 0; j < r[i].num_doorways; j++) scanf("%d", &r[i].doorways[j]); r[i].last_energy = -1; } printf("%s\n", ddfs(1, 100)?"winnable" : "hopeless"); } return 0; }
相关文章推荐
- uva 10557 XYZZY
- UVA 10557 XYZZY
- UVA 10557 - XYZZY
- Uva 10557 - XYZZY(DFS+BFS)
- uva 10557 - XYZZY 关键词:正环,无敌bfs,单源最短路spfa算法
- Uva 10557 XYZZY
- UVA 10557 XYZZY
- uva10557 - XYZZY(图的bfs ;dfs)
- UVA 10557 XYZZY
- UVa 10557 & HDU 1317 - XYZZY
- Uva10557 XYZZY
- UVA 10557 XYZZY
- UVA 10557 XYZZY 结题报告
- UVA 10557-XYZZY
- UVA - 10557 XYZZY
- XYZZY - UVa 10557 图论
- UVA 10557 XYZZY (Floyd+Bellman)
- UVA - 10557 XYZZY
- UVA10557-XYZZY
- UVA - 10557 XYZZY(DFS + BFS)