标签:存储 name tor 题解 bfs back pop 多少 iterator
题意
思路+代码
#include<bits/stdc++.h>
using namespace std;
vector<int> to[100010];
bool used[100010];
int ans[100010];
int main( ){
int n,m,x,y,j;
vector<int>::iterator i;
scanf("%d%d",&n,&m);
while(m--){
scanf("%d%d",&x,&y);
to[x].push_back(y);
} //输入+存储
queue<int>q;
q.push(1);
ans[1]=1; //初始化
while(!q.empty()){ //sppfa模板
x=q.front( );
q.pop( );
used[x]=0;
for(i=to[x].begin();i<to[x].end();i++)
if(ans[*i]<ans[x]+1){
ans[*i]=ans[x]+1;
if(!used[*i]){
q.push(*i);
used[*i]=1;
}
}
}
for(j=1;j<=n;j++)
printf("%d\n",ans[j]);
}
#include<bits/stdc++.h>
using namespace std;
vector<int> to[100010];
bool used[100010],ok[100010];
int ans[100010];
int main( ){
int n,m,x,y,j;
vector<int>::iterator i;
scanf("%d%d",&n,&m);
while(m--){
scanf("%d%d",&x,&y);
ok[y]=1; //记录入度是否为0
to[x].push_back(y);
}
queue<int>q;
for(j=1;j<=n;j++) //存入所有入度为0的城市
if(!ok[j]){
q.push(j);
ans[j]=1;
used[j]=1;
}
while(!q.empty()){
x=q.front( );
q.pop( );
used[x]=0;
for(i=to[x].begin();i<to[x].end();i++)
if(ans[*i]<ans[x]+1){
ans[*i]=ans[x]+1;
if(!used[*i]){
q.push(*i);
used[*i]=1;
}
}
}
for(j=1;j<=n;j++)printf("%d\n",ans[j]);
}
标签:存储 name tor 题解 bfs back pop 多少 iterator
原文地址:https://www.cnblogs.com/the-Blog-of-Mikasa/p/12242623.html