复习一下BFS,顺便用一下STL的queue
给一个图,输出所有节点到节点1的距离
如:
Sample Input 1
4
1 2 2 4
2 1 4
3 0
4 1 3
Sample Output 1
1 0
2 1
3 2
4 1
代码如下:
#include<iostream>
#include<queue>
using namespace std;
#define N 100
int graph[N][N];
int dis[N];
int check[N];
int n;
queue<int> q;
void init(){
cin>>n;
for(int i=0;i<n;i++){
for(int j=0;j<n;j++){
graph[i][j] = 0; //图初始化
}
check[i]=0; //标记数组初始化
dis[i] = -1;
}
int v,count,x;
for(int i=0;i<n;i++){
cin>>v;
cin>>count;
for(int i=0;i<count;i++){
cin>>x;
graph[v-1][x-1]=1;
}
}
q.push(1);
check[0]=1;
dis[0]= 0;
}
int BFS(int v){
for(int i=0;i<n;i++){
if(graph[v-1][i]>0&&check[i]==0){
q.push(i+1);
check[i]=1;
dis[i] = dis[v-1]+1;
}
}
q.pop();
}
int main(){
init();
while(q.size()>0){
BFS(q.front());
}
for(int i=0;i<n;i++){
cout<<i+1<<" "<<dis[i]<<endl;
}
return 0;
}