拓扑排序
这是邻接矩阵无优化版
背景资料:(百度百科)https://baike.baidu.com/item/%E6%8B%93%E6%89%91%E6%8E%92%E5%BA%8F/5223807?fr=aladdin
以下为代码
/* 我们知道,拓扑排序是个重要的东西 然而,重要的东西是不可能一下子做出来的,不然他也不重要了 拓扑排序——邻接矩阵(无优化) */ //当然,这是针对有向无环图的东西 #include<iostream> #include<queue> #include<bits/stdc++.h> using namespace std; queue <int> p1; long int ind[100000],le[20000],ans; long int a[5000][20000]; int main() { int n,m; cin>>n>>m; for(int i=1;i<=m;++i) { int k,j; cin>>k>>j; a[k][j]=1; ind[j]++;//邻接矩阵的入度统计 } for(int i=1;i<=n;++i) { if(!ind[i]) { p1.push(i); le[i]=1;//将入度为零的点压入队列 } } while(p1.size()) { int u=p1.front();p1.pop();//取出 for(int i=1;i<=n;++i) { if(a[u][i]){//以下为统计等级 le[i]=max(le[i],le[u]+1); //ans=max(ans,le[i]);//计算最大值 因题而异 ind[i]--;//减少入度 if(!ind[i])//如果入度为零,压入 p1.push(i); } } } for(int i=1;i<=n;++i) { cout<<le[i]<<endl; //这点也是不必要的,因题而异 } }
图论的恶心之处
THAT'S ALL.