topological:
1.把所有indegree为0的顶点入队
2.当队不为空
获取队头元素,并出队,记录。
使用队头元素找到相邻的边后 使该点入度-1
判断indegree为0入队
--------- 当count为n时 拓扑成功-----------否则 失败 因:成环
源码:
#include <iostream>
#include <algorithm>
#include <limits.h>
using namespace std;
const int N=100;
int map[N][N];
int vis[N];
void topsort(int n)
{
int in;
//所有顶点依次去除
for(int i=0;i<n;i++)
{
//先找一个入度为0的节点;
for(int j=0;j<n;j++)
{
for(int k=0;k<n;k++)
{
//纵坐标为入度
if(!vis[k])
{
vis[k]=-1;
in=k;
cout<<k<<endl;
break;
}
}
}
//使用当前入度为0 的 in点 把所有以此点为入度的点 入度--
for(int i=0;i<n;i++)
{
if(map[in][i]==1)
{
vis[i]--; //入度--
map[in][i]=0; //且不可达了
}
}
}
}
int main()
{
int n,v;
cout<<"请输入顶点数和边数:"<<endl;
cin>>n>>v;
int key1,key2;
for(int i=0;i<v;i++)
{
cin>>key1>>key2;
map[key1][key2]=1; //key1->key2
vis[key2]++; //key2入度+1
}
topsort(n);
return 0;
}