您的位置:首页 > 其它

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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: