最短路-边权为1
题目
给你一棵以1为根的树,求树的深度给你一副无向图,不保证连通,求图上两点间的最短路,每条边的长度都是1
代码
#include <iostream>
#include <cstdio>
#include <cstring>
#include <queue>
using namespace std;
int n, m, s, t;
struct P
{
int x, y;
};
bool vis[10010];
bool mp[5010][5010];
int dis[10010];
int bfs()
{
memset(dis, -1, sizeof dis);
queue <int> q;
q.push(s);
dis[s] = 0;
while(! q.empty())
{
int f = q.front();
q.pop();
for(int i = 1; i <= n; i ++)
{
if(mp[f][i])
{
if(! vis[i])
{
vis[i] = true;
dis[i] = dis[f] + 1;
q.push(i);
}
}
}
}
return dis[t];
}
int main()
{
scanf("%d%d", &n, &m);
for(int i = 1; i <= m; i ++)
{
int a, b;
scanf("%d%d", &a, &b);
mp[a][b] = mp[b][a] = true;
}
scanf("%d%d", &s, &t);
cout << bfs();
return 0;
}