UVA10557-XYZZY
来源:互联网 发布:捷克语翻译软件 编辑:程序博客网 时间:2024/06/05 22:48
就是找正环,再找路径,详细的待以后再讨论
先贴上代码:
dfs+dfs:
#include <iostream>#include <cstring>using namespace std;struct Room{ int value,count; int list[100];};Room room[150];int n, value[150], visit[150] = {0, 0, 0};;void input(){ for(int i = 1; i <= n; i++) { cin>>room[i].value>>room[i].count; int len = room[i].count; for(int j = 0; j < len; j++) cin>>room[i].list[j]; value[i] = 0; }}int ddfs(int u){ if(u==n)return 1; for(int i = 0; i < room[u].count; i++) { if(!visit[room[u].list[i]]){ visit[room[u].list[i]] = 1; if(ddfs(room[u].list[i])) return 1;} } return 0;}int dfs(int u, int e){ if(e<=0)return 0; if(u==n)return 1; value[u] = e + room[u].value; for(int i = 0; i < room[u].count; i++) { if(!value[room[u].list[i]]){if(dfs(room[u].list[i],e+room[u].value)) return 1;} else if(value[u]+room[room[u].list[i]].value>value[room[u].list[i]]&&memset(visit,0,sizeof(visit)),ddfs(room[u].list[i])) return 1; } return 0;}int main (){ while(cin>>n&&n!=-1) { input(); if(dfs(1,100))cout<<"winnable"<<endl; else cout<<"hopeless"<<endl; } return 0;}
dfs+bfs:
#include <iostream>using namespace std;struct Room{ int value,count; int list[100];};Room room[150];int n, value[150];void input(){ for(int i = 1; i <= n; i++) { cin>>room[i].value>>room[i].count; int len = room[i].count; for(int j = 0; j < len; j++) cin>>room[i].list[j]; value[i] = 0; }}int bfs(int u){ int q[150], visit[150] = {0, 0, 0}; int front = 0, rear = 0; q[0] = u; while(front>=rear) { int r = q[rear]; for(int i = 0; i < room[r].count; i++) { if(visit[room[r].list[i]])continue; if(room[r].list[i]==n)return 1; q[++front] = room[r].list[i]; visit[room[r].list[i]] = 1; } rear++; } return 0;}int dfs(int u, int e){ if(e<=0)return 0; if(u==n)return 1; value[u] = e + room[u].value; for(int i = 0; i < room[u].count; i++) { if(!value[room[u].list[i]]){if(dfs(room[u].list[i],e+room[u].value)) return 1;} else if(value[u]+room[room[u].list[i]].value>value[room[u].list[i]]&&bfs(room[u].list[i])) return 1; } return 0;}int main (){ while(cin>>n&&n!=-1) { input(); if(dfs(1,100))cout<<"winnable"<<endl; else cout<<"hopeless"<<endl; } return 0;}
都是16秒过的、
- UVA10557-XYZZY
- uva10557 XYZZY
- XYZZY UVA10557
- uva10557 - XYZZY(图的bfs ;dfs)
- UVA10557
- uva10557
- XYZZY
- XYZZY
- XYZZY
- 10557 - XYZZY
- UVaOJ10557---XYZZY
- hdu1317 XYZZY
- HDU1317 XYZZY
- XYZZY HDU
- XYZZY HDU1317
- POJ 1932 XYZZY
- poj 1932 XYZZY
- UVaOJ 10557 - XYZZY
- 深更半夜的遇到的PHP基础问题
- 一些常用软件的网络端口协议分类介绍
- 与afreez一起学习DSP中浮点转定点运算--浮点数的存储格式
- 【Visual C++】一些开发心得与调试技巧
- 静态库与动态库的区别
- UVA10557-XYZZY
- 【Visual C++】游戏开发笔记十九 DirectX与OpenGL的博弈
- JavaScript常用代码
- 【Visual C++】游戏开发笔记二十 游戏基础物理建模(二) 重力系统的模拟
- 【Visual C++】游戏开发笔记二十一 游戏基础物理建模(三) 摩擦力系统模拟
- ZeroMQ 的模式
- 【Visual C++】游戏开发笔记二十二 游戏基础物理建模(四) 粒子系统模拟(一)
- 实现简单的队列操作函数
- 【Visual C++】游戏开发笔记二十三 游戏基础物理建模(五) 粒子系统模拟(二)