拓扑排序

//拓扑排序 
#include<bits/stdc++.h>
using namespace std;
queue<int>q;
int n,m;
int in[1000];
bool b[1001];
struct node
{
    int n;
    node *next;
}*e[1000];
int main()
{
    cin>>n>>m;
    node *p;
    int x;
    for(int i=1;i<=m;i++)
    {
        p=new node();
        cin>>x>>p->n;
        in[p->n]+=1;
        if(e[x]==NULL)
        e[x]=p;
        else
        {
            p->next=e[x]->next;
            e[x]->next=p;
        }
    }
  
  
   for(int i=1;i<=n;i++)
    if(in[i]==0)
    q.push(i);
    while(!q.empty())
    {
        node *p;
        p=e[q.front()];
        cout<<q.front()<<"->";
      while(p!=NULL)
     {
        in[p->n]-=1;
        if(in[p->n]==0)
       q.push(p->n);
        p=p->next;
     }    
     q.pop();
    }
    return 0;
}

 

posted @ 2017-08-05 15:12  WeiAR  阅读(115)  评论(0编辑  收藏  举报