图结构练习——BFS——从起始点到目标点的最短步数
Time Limit: 1000ms Memory limit: 65536K 有疑问?点这里^_^
题目描述
输入
输出
示例输入
2 1 1 2 2 1 2 1
示例输出
NO 1
好久之前的一道没有A掉的水题,WA了我n遍
#include <bits/stdc++.h>
#define INF 0x3f3f3f3f
using namespace std;
int vis[1010], dis[1010];
int n, m;
struct node
{
int v, ant;
};
vector<int> Map[1010];
void BFS()
{
for(int i=0; i<=n; i++)
vis[i] = 0;
node tmp;
tmp.v = n;
tmp.ant = 0;
queue<node > q;
vis[n] = 1;
q.push(tmp);
while(!q.empty())
{
node u = q.front();
q.pop();
vis[u.v] = 0;
if(u.v == 1){
printf("%d\n",u.ant);
return ;
}
for(int i=0; i<(int)Map[u.v].size(); i++)
{
node t;
t.v = Map[u.v][i];
t.ant = u.ant + 1;
if(!vis[t.v])
{
q.push(t);
vis[t.v] = 1;
}
}
}
printf("NO\n");
}
int main()
{
while(~scanf("%d%d",&n,&m))
{
for(int i=0; i<=n; i++)
Map[i].clear();
for(int i=0; i<m; i++)
{
int u, v;
scanf("%d%d",&u,&v);
Map[u].push_back(v);
}
BFS();
}
return 0;
}