Wednesday, February 08, 2012

Topological Sort (10305 - Ordering Tasks)

/***
Topological Sort
Author : Md.Saiful Islam
***/


#include<stdio.h>
#include<stdlib.h>


int Node,Edge,adjlist[102][102],a,b,start,i,x,front;
bool flag[110];
void dfs_visit(int x)
{
if( !flag[x])
{
flag[x] = 1;


for(i = 1;i <= adjlist[x][0];i++)
dfs_visit(adjlist[x][i]);


start++;
if(start != Node) printf("%d ",x);
else printf("%d",x);
}
}


int main()
{
while(scanf("%d%d",&Node,&Edge)==2 && (Node || Edge))
{
for(i=0;i<Edge;i++)
{
scanf("%d %d",&a,&b);
adjlist[b][++adjlist[b][0]] = a;
}
start = 0;


for(front = 1;front <= Node; front++)
dfs_visit(front);


for(i=1;i<=Node;i++)
adjlist[i][0] = flag[i] = 0;
printf("\n");
}
return 0;
}

No comments:

Post a Comment