提示
#include <iostream> #include <cstdio> #include <cstring> #include <queue> using namespace std; struct node { int data,step; }v,t; int mp[1500][1500],vis[1500]; int bfs(int x,int n) { queue<struct node>q; t.step=0; int i; t.data=x; q.push(t); while(!q.empty()) { v=q.front(); q.pop(); if(v.data==1) { printf("%d\n",v.step); return 1; } for(i=1;i<=n;i++)//一次循环是一层与队列首元素相关的全部元素 { if(mp[v.data][i]&&!vis[i])//相当于层序遍历,第一层是走一步的全部存入队列1,从第一层,第二层往后依次遍历只要某一层存在v.data=1,到了终点,最短步数就出来了 {
vis[i]=1; t.data=i; t.step=v.step+1; q.push(t); } } } printf("NO\n"); return 0; } int main() { int n,m,a,b,i; while(~scanf("%d%d",&n,&m)) { memset(mp,0,sizeof(mp)); memset(vis,0,sizeof(vis)); for(i=0;i<=m-1;i++) { scanf("%d%d",&a,&b); mp[a][b]=1; } vis[n]=1; bfs(n,n); } return 0; }
