标签:acm算法 algorithm amp iostream namespace
| Time Limit: 1000MS | Memory Limit: 65536K | |||
| Total Submissions: 3314 | Accepted: 2226 | Special Judge | ||
Description
Input
Output
Sample Input
5 0 4 5 1 0 1 0 5 3 0 3 0
Sample Output
2 4 5 3 1
Source
#include <set>
#include <cstdio>
#include <queue>
#include <map>
#include <iostream>
#include <algorithm>
#include <cstring>
#include <cmath>
const double PI=acos(-1.0);
using namespace std;
int n,len;
int edge[110][110];
int cnt[110];
int vis[110];
void t_p_sort()
{
priority_queue<int>q;
int i,j;
for(i=1; i<=n; i++)
for(j=1; j<=n; j++)
if(edge[i][j])
cnt[j]++; //入度加一。
for(i=1; i<=n; i++)
{
if(cnt[i]==0) // 找一个起点
q.push(i);
}
int temp;
while(!q.empty())
{
temp=q.top();
q.pop();
vis[len++]=temp;
for(i=1; i<=n; i++)
{
if(edge[temp][i])
{
cnt[i]--; //找到u->v v的入度减一
if(cnt[i]==0) //如果v变成起点,继续循环。
q.push(i);
}
}
}
return;
}
int main()
{
int u,v,i;
while(cin>>n)
{
int p=n;
memset(edge,0,sizeof(edge));
memset(cnt,0,sizeof(cnt));
memset(vis,0,sizeof(vis));
len=0;
u=1;
while(p--)
{
while(cin>>v,v)
edge[u][v]=1;
u++;
}
t_p_sort();
for(i=0; i<len; i++)
{
if(!i)
cout<<vis[i];
else
cout<<" "<<vis[i];
}
cout<<endl;
}
return 0;
}
标签:acm算法 algorithm amp iostream namespace
原文地址:http://blog.csdn.net/sky_miange/article/details/45171479