POJ 2367 topo
来源:互联网 发布:淘宝网天猫女冬皮鞋 编辑:程序博客网 时间:2024/05/17 09:17
//just 模板题。////toposort//给出大于和小于关系,实际上是要找一条边连接这些点。//如果图中存在有向环,则不存在拓扑排序,反之则存在////有向无环图#include<iostream>#include<cstring>#include<cstdio>#include<cstdlib>#define MAXN 500using namespace std;int G[MAXN][MAXN];int c[MAXN];int topo[MAXN],t;///用于存排序后的点int n;//本题属于最基础的拓扑排序。大意就是,给出一个数n,//然后底下n行,编号1到n, 每行输入几个数,保证结果中该行的编号要在这几个数前面。bool dfs(int u) ///0-n-1个点{ c[u]=-1; for(int v=1;v<=n;v++) if(G[u][v])///在访问这个点时,c[i]=-1,如果找到-1,即回到了这个点,即有环 { if(c[v]<0) return false;///存在有向环,失败退出。 else if(!c[v]&&!dfs(v)) return false;///未访问过而且找不到下一个连接的点,则返回false } //cout<<"miao"<<endl; c[u]=1;topo[t--]=u;///成功找到,进栈,先遍历到的是根节点,所以倒序入栈 return true;}bool toposort(){ t=n; memset(c,0,sizeof(c));///初始设定都为未访问 for(int u=1;u<=n;u++) if(!c[u])///未访问过才去访问他 { if(!dfs(u)) return false;///这个点找不到连接,returned false; } return true;}int main(){ int a; //freopen("in.txt","r",stdin); while(scanf("%d",&n)!=EOF) { for(int i=1;i<=n;i++) { while(1) { scanf("%d",&a); if(a==0) break; G[i][a]=1; // cout<<i<<" "<<a<<endl; } } toposort(); for(int i=1;i<=n-1;i++) cout<<topo[i]<<" "; cout<<topo[n]<<endl; }}
0 0
- POJ 2367 topo
- poj 2367 topo 排序
- POJ 3687 Topo 拓扑
- topo
- topo
- poj 1094 Sorting It All Out[ topo]
- POJ - 1094 Sorting It All Out [ topo]
- Poj 3687 Labeling Balls (逆向Topo)
- poj 1094 topo 在线处理数据
- poj--2585(经典topo排序)
- flex topo
- Topo排序
- Reward--topo
- 0.5poj1270(topo)
- TOPO DN 解析
- HDU 5438 topo
- topo拓扑解题思路
- 确定比赛名次--topo
- 音频播放
- 部署memcached环境及PHP扩展
- Windows安装配置php+memcached的方法
- 判断sqlserver对象是否存在
- MySQL管理数据表
- POJ 2367 topo
- 为现代JavaScript开发做好准备
- Linux CentOS下搭建JAVA运行环境
- 简单的java中文分词IK Analyzer
- HDU 4067 费用流
- 【MySQL】性能优化之 覆盖索引
- HDU 1827 强连通加缩点
- CVG Talk on Deep Learning
- hadoop-2.2.0的环境下对 spark-1.3.1 的编译