本题采用拉链法,哈希方式是int k->int v,k是点,v是另外一条点v对应的下标
add函数里面h[a]表示点a关联的另外一条点b在e中的下标
bfs函数里面j表示的也是下标,表示点t关联的下标,
d数组表示点1到另外某个点的距离,比如d【j】是表示点1
到点j
的最短距离
#include<iostream>
#define N 100086
#include<queue>
#include<cstring>
using namespace std;
int e[N],ne[N],h[N],idx;
int d[N];
int n,m;
queue<int> q;
void add(int a,int b){e[idx]=b,ne[idx]=h[a],h[a]=idx++;
}
int bfs(){q.push(1);d[1]=0;while(q.size()){int t=q.front();q.pop();for(int i=h[t];i!=-1;i=ne[i]){int j=e[i];if(d[j]==-1){d[j]=d[t]+1;q.push(j);}}}return d[n];
}
int main(){memset(h,-1,sizeof h);memset(d,-1,sizeof d);cin>>n>>m;for(int i=1;i<=m;++i){int a,b;cin>>a>>b;add(a,b);}cout<<bfs()<<endl;return 0;
}