#include<bits/stdc++.h> using namespace std; int mmap[1010][1010]; int vis[1010]; struct node { int data; int con; }p,temp;
void BFS(int k) { queue<node>q; p.data=k; p.con=0; q.push(p); vis[k]=1; while(!q.empty()) { temp=q.front(); q.pop(); if(temp.data==1) { cout<<temp.con<<endl; //最先到达1的就是最短的。 return; } for(int i=1; i<=k; i++) { if(!vis[i] && mmap[temp.data][i]) //注意此处是mmap[mmap][data] { p.data=i; p.con=temp.con+1; q.push(p); vis[i]=1; }
} } cout<<"NO"<<endl; } int main() { int m,k; int u,v; while(cin>>k>>m) { memset(mmap,0,sizeof(mmap)); memset(vis,0,sizeof(vis)); for(int i=0; i<m; i++) { cin>>u>>v; if(u!=v) //连通图的结点数和边数不可能一样 mmap[u][v]=1; } BFS(k); } }
