1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37
|
#include<cstdio>
#include <queue>
#include <vector>
using namespace std;
int main() {
//variable declarations
int i,j,steps=1,n,m,s,t,tmp,tmp1,visited[1000001];
vector<vector<int> > buildings ( 3001, vector<int> ( 3001 ) );
queue<int> tovisit;
//take inputs
scanf("%d %d",&n,&m);
for (i=1;i<=m;i++) {
scanf("%d %d",&tmp,&tmp1);
buildings[tmp][buildings[tmp][0]+1]=tmp1;
buildings[tmp][0]++;
buildings[tmp1][buildings[tmp1][0]+1]=tmp;
buildings[tmp1][0]++;
}
scanf("%d %d",&s,&t);
if (s==t) {printf("0");goto gym;}
//intialize queue tovisit
visited[s]=1;
for (i=1;i<=buildings[s][0];i++) {tovisit.push(buildings[s][i]);visited[buildings[s][i]]=1;}
tovisit.push(-1);
while (!tovisit.empty()) {
if (tovisit.front()==t) {printf("%d",steps);break;}
if (tovisit.front()==-1) {steps++;tovisit.pop();if (tovisit.empty()) {printf("0");break;}tovisit.push(-1);} else {
for (i=1;i<=buildings[tovisit.front()][0];i++) {if (visited[buildings[tovisit.front()][i]]!=1) {
for (j=1;j<=buildings[tovisit.front()][0];j++) if (visited[buildings[tovisit.front()][i]]!=1) tovisit.push(buildings[tovisit.front()][j]);
}
}
visited[tovisit.front()]=1;
tovisit.pop();
}
}
gym:;
}
|