数据结构作业之-拓扑排序(C++实现)

数据结构作业之-拓扑排序(C++实现)

// 张宏数据结构作业之__拓扑排序
// Get Guidance by Mr ZhangHong
// Student:abilitytao

#include
< iostream >
#include
< cmath >
#include
< cstdio >
#include
< algorithm >
#include
< stack >
using   namespace  std;
#define  MAX 9999

stack
< int > mystack;
int  indegree[MAX];

struct  node 
{
    
int adjvex;
    node
* next;
}
adj[MAX];

int  Create(node adj[], int  n, int  m) // 邻接表建表函数,n代表定点数,m代表边数
{
    
int i;
    node 
*p;
    
for(i=1;i<=n;i++)
    
{
        
        adj[i].adjvex
=i;
        adj[i].next
=NULL;
    }

    
for(i=1;i<=m;i++)
    
{
        cout
<<"请输入第"<<i<<"条边:";
        
int u,v;
        cin
>>u>>v;
        p
=new node;
        p
->adjvex=v;
        p
->next=adj[u].next;
        adj[u].next
=p;
    }

    
return 1;
}



void  print( int  n) // 邻接表打印函数
{
    
int i;
    node 
*p;
    
for(i=1;i<=n;i++)
    
{
        p
=&adj[i];
        
while(p!=NULL)
        
{
            cout
<<p->adjvex<<' ';
            p
=p->next;
        }

        cout
<<endl;
    }

}


void  topsort(node adj[], int  n)
{

    
int i;
    node 
*p;
    memset(indegree,
0,sizeof(indegree));
    
for(i=1;i<=n;i++)
    
{

        p
=adj[i].next;
        
while(p!=NULL)
        
{
            indegree[p
->adjvex]++;
            p
=p->next;
        }

    }

    
for(i=1;i<=n;i++)
    
{

        
if(indegree[i]==0)
            mystack.push(i);
    }

    
int count=0;
    
while(mystack.size()!=0)
    
{

        i
=mystack.top();
        mystack.pop();
        cout
<<i<<' ';
        count
++;
        
for(p=adj[i].next;p!=NULL;p=p->next)
        
{
            
int k=p->adjvex;
            indegree[k]
--;
            
if(indegree[k]==0)
                mystack.push(k);
        }

    }

    cout
<<endl;
    
if(count<n)cout<<"有回路"<<endl;
}




int  main()
{
    
int n;
    
int m;
    cout
<<"请输入顶点数及边数:";
    cin
>>n>>m;
    Create(adj,n,m);
    cout
<<"输入的邻接表为:"<<endl;
    print(n);
    cout
<<"拓扑排序结果为:"<<endl;
    topsort(adj,n);
    system(
"pause");
    
return 0;
}


数据结构作业之-拓扑排序(C++实现)_第1张图片

你可能感兴趣的:(数据结构作业之-拓扑排序(C++实现))