HRBUST 1501 Car Trouble 深搜
来源:互联网 发布:什么是嵌入式软件开发 编辑:程序博客网 时间:2024/05/18 20:35
题意
第一行一个整数n 代表 街道的数目
接下来n行 每一行第一个数字id 代表一个街道的编号,第二个数字tot代表id这个街道能到达的街道数,接下来tot个数字代表id街道能到达的街道的编号
输出要求
_1 如果编号为x的街道不能从0号街道到达,输出UNREACHABLE X
_2 如果编号为x的街道不能到达0号街道,输出TRAPPED X
如果没有符合上述情况的街道,输出 NO PROBLEMS
首先输出_1 情况然后输出_2情况..............
思路比较简单,先从0深搜一遍 看哪些不能到,输出
再重置下,然后枚举每条街道深搜 看能不能到0..
注意街道的编号不一定是按照顺序给出的...然后就是输出的次序是先_1在_2,并且街道的顺序要按输入的来.....
#include<stdio.h>#include<string.h>struct ss{ int to[1005]; int tot;}a[1015];int vis[1005];int order[1011];void dfs(int id){ vis[id]=1; int tp=order[id]; for(int i=0;i<a[tp].tot;i++){ if(!vis[a[tp].to[i]])dfs(a[tp].to[i]); }} int main(){ int n,m,id[1010]; while(scanf("%d",&n)!=EOF){ memset(vis,0,sizeof(vis)); memset(id,0,sizeof(id)); memset(order,0,sizeof(order)); int flag=0; for(int i=0;i<n;i++){ scanf("%d %d",&id[i],&a[i].tot); for(int j=0;j<a[i].tot;j++){ scanf("%d",&a[i].to[j]); } order[id[i]]=i; } for(int i=0;i<n;i++){ memset(vis,0,sizeof(vis)); dfs(id[i]); if(!vis[0]){ printf("TRAPPED %d\n",id[i]); flag++; } } memset(vis,0,sizeof(vis)); dfs(0); for(int i=0;i<n;i++){ if(!vis[id[i]]){ printf("UNREACHABLE %d\n",id[i]); flag++; } } if(!flag)printf("NO PROBLEMS\n"); } return 0;}
int tot,head[1010];void in(int id,int to){ a[tot].id=id; a[tot].to=to; a[tot].next=head[id]; head[id]=tot++;}int v[1010];void dfs(int id){ v[id]=1; for(int i=head[id];i!=-1;i=a[i].next){ if(!v[a[i].to]) dfs(a[i].to); }}
- HRBUST 1501 Car Trouble 深搜
- BMW car code erro P0128 OBD-II Trouble Code
- hrbust 哈理工OJ 1498Elevator Trouble【BFS过】
- trouble
- trouble
- Car
- Car
- Car
- HRBUST
- HRBUST
- HRBUST
- HRBUST
- HRBUST
- HRBUST
- HRBUST
- Hrbust
- HRBUST
- HRBUST
- Maven简介
- Windows 下如何安装配置Snort视频教程
- google hacking
- Ajax学习小例
- 图像的RGB颜色空间和HSI空间的转换
- HRBUST 1501 Car Trouble 深搜
- C++ 定义数组大小问题
- MFC调用c#的dll
- sql语句统计某个词出现的次数(使用replace)
- 简单排序
- 程序设计应知道的那些事儿之函数
- linux---应用编程
- forward 和redirect的区别
- 调用系统剪切方法,剪切任意比例图片