您的位置:首页 > 编程语言 > C语言/C++

POJ 2367 (入门拓扑排序 )

2016-08-09 18:05 423 查看
POJ 2367

题意:知道一个数n, 然后n行,编号1到n, 每行输入几个数,每行以0结尾,输出一种符合要求的编号名次排序。

思路:入门题,理解   “ 度 ” 和 map[ ] [ ]的关系。

#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;

#define M 110

int main()
{
int n;
int map[M][M];
int ingreed[M];
int ans[M];

while(cin>>n && n != 0){

memset(map,0,sizeof(map));
memset(ingreed,0,sizeof(ingreed));

for(int i = 1;i <= n; i++){
int p;
while(cin>>p,p){
map[i][p] = 1;
ingreed[p]++;
}
}
int all = 0;
for(int i = 1;i <= n; i++)
for(int j = 1;j <= n; j++)
if(ingreed[j] == 0){
ans[all++] = j;
ingreed[j] = -1;
for(int k = 1;k <= n; k++)
if(map[j][k] == 1)
ingreed[k]--;
break;
}

for(int i = 0;i < all; i++)
printf("%d%c",ans[i],i == all - 1 ? '\n' : ' ');
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  拓扑排序 算法 c++