XYZZY
来源:互联网 发布:galgame软件手机 编辑:程序博客网 时间:2024/06/04 19:31
XYZZY
大意:
模拟一个游戏,初始时有100能量,处于房间1, 现在输入n,表示有n个房间的信息,接下来n行,每行输入进入房间n的所获得的能量,以及该房间可以进入其他房间的数目;
房间可以重复进入,求出能否到达房间n,且到达每个房间时能量都大于0;
要点:
房间可以重复进入,所以能量可以达到无限;
可以判断每次到达某个房间时的能量,下一次到达该房间时如果能量大于上一次的能量,则存在正环,判断是否存在到达n的房间即可;
代码:
#include <cstdio>#include <queue>#include <string.h>using namespace std;int map[105][105], value[105], energy[105],vis[105], text;int bfs(int x){queue <int> que;que.push(x);while (!que.empty()){for (int i = 1; i <= text; i++){if (map[que.front()][i] && !vis[i]){if (i == text)return 1;que.push(i);vis[i] = 1;}}que.pop();}return 0;}int dfs(int room, int curenergy){if (room == text)return 1;else {for (int i = 1; i <= text; i++){if (map[room][i] && curenergy + value[i] > 0){if (energy[i] == 0){energy[i] = curenergy + value[i];if (dfs(i, energy[i]))return 1;}else if (curenergy + value[i] > energy[i] && bfs(i))return 1;}}}return 0;}int main(){while (scanf("%d", &text) && text != -1){memset(map, 0, sizeof(map));memset(value, 0, sizeof(value));memset(energy, 0, sizeof(energy));memset(vis, 0, sizeof(vis));for (int i = 1; i <= text; i++){int num;scanf("%d%d", &value[i], &num);for (int j = 1; j <= num; j++){int temp;scanf("%d", &temp);map[i][temp] = 1;}}if (dfs(1, 100))printf("winnable\n");elseprintf("hopeless\n");}return 0;}
0 0
- XYZZY
- XYZZY
- XYZZY
- 10557 - XYZZY
- UVA10557-XYZZY
- UVaOJ10557---XYZZY
- uva10557 XYZZY
- XYZZY UVA10557
- hdu1317 XYZZY
- HDU1317 XYZZY
- XYZZY HDU
- XYZZY HDU1317
- POJ 1932 XYZZY
- poj 1932 XYZZY
- UVaOJ 10557 - XYZZY
- UVa 10557 - XYZZY
- uva 10557 - XYZZY
- UVA 10557 XYZZY
- 协议(protocol)委托代理
- 弹出层遮罩
- WPF调用Matlab函数方法
- 二进制文件与文本文件
- android AsyncTask和Handler对比
- XYZZY
- 西电人总结各it公司待遇
- LeetCode题解:3Sum
- hadoop的一些知识
- HDU 3376--Matrix Again【最大费用最大流 && 经典建图】
- nyoj 94 cigarettes 【水题】
- SAP系统与MES系统的数据协同技术方案
- jenkins邮件配置
- input控件中输入控制的几种方法