描述
有n个人,他们的编号为1~n,其中有一些人相互认识,现在x想要认识y,可以通过他所认识的人来认识更多的人,如果x认识z,z认识y,那么x可以通过z认识y,求出x最少需要通过多少人才能认识y。
输入描述
第1行3个整数n、x、y,2≤n≤100,1≤x,y≤n。
接下来是一个n×n的邻接矩阵,a[i,j]=1,表示i和j认识,0表示不认识。
保证i=j时,a[i,j]=0,并且a[i,j]= a[j,i]。行中的每两个数之间用一个空格分开。
输出描述
输出一行一个数,表示x认识y最少需要通过的人数。
样例输入 1
5 1 5 0 1 0 0 0 1 0 1 1 0 0 1 0 1 0 0 1 1 0 1 0 0 0 1 0
样例输出 1
2
上代码!
#include <bits/stdc++.h>
using namespace std;
int a[105][105];
int b[105];
queue<int> q;
queue<int> s;
int main(){
int n,x,y;
cin>>n>>x>>y;
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
cin>>a[i][j];
b[x]=1;
q.push(x);
s.push(0);
while(!q.empty()){
for(int j=1;j<=n;j++){
if(a[q.front()][j]!=0&&!b[j]){
q.push(j);
s.push(s.front()+1);
if(j==y){
cout<<s.front();
return 0;
}
b[j]=1;
}
}
q.pop();
s.pop();
}
return 0;
}