改进DAG图dijkstra
作者:
把头发掀起来看世界
,
2024-12-03 16:41:31
,
所有人可见
,
阅读 1
#include <iostream>
#include <queue>
using namespace std;
const int N=10010;
int g[N][N];
int ind[N],level[N];
queue<int> q;
int main()
{
int n,m;
cin>>n>>m;
while(m--)
{
int a,b;
cin>>a>>b;
g[a][b]=1;
}
for(int i=1;i<=n;i++)
{
int t=0;
for(int j=1;j<=n;j++)
{
if(g[j][i])t++;
}
ind[i]=t;
if(t==0)q.push(i);
}
/*for(int i=1;i<=n;i++)
cout<<ind[i]<<" ";
cout<<endl;*/
/*for(int i=1;i<=n;i++)
{
for(int j=1;j<=n;j++)
{
cout<<g[i][j]<<" ";
}
cout<<endl;
}*/
while(q.size())
{
int t=q.front();
q.pop();
for(int i=1;i<=n;i++)
{
if(g[t][i])
{
level[i]=level[t]+1;
ind[i]--;
if(ind[i]==0)q.push(i);
}
}
}
for(int i=1;i<=n;i++)
cout<<level[i]<<" ";
cout<<endl;
return 0;
}
/*
9 11
1 2
1 3
2 4
3 4
4 5
5 6
5 7
5 8
6 9
8 9
9 7
*/