#include<iostream>
#include<fstream>
#include<queue>
using namespace std;
struct e{
int data;
e *next;
};
e edge[50001];
void add(int s,int t){
e *p=new e;
p->data=t;
p->next=edge[s].next;
edge[s].next=p;
}
int path[50001];
int v[50001];
int n,m;
int solve(){
int i,j,k;
queue<int> q;
q.push(1);
path[1]=0;
v[1]=1;
while(!q.empty())
{
i=q.front();
q.pop();
e *p=edge[i].next;
while(p)
{
if(v[p->data]==0)
{
v[p->data]=1;
path[p->data]=i;
if(p->data==n) return 1;
q.push(p->data);
}
p=p->next;
}
}
return 0;
}
void print(int s,int t){
if(s!=1)
{
print(path[s],t+1);
cout<<s<<endl;
}
else
{
cout<<t<<endl;
cout<<1<<endl;
}
}
void read(){
// ifstream cin("in.txt");
int i,j,k;
cin>>m>>n;
for(i=1;i<=m;i++)
{
cin>>j>>k;
add(j,k);
}
i=solve();
if(i==0) cout<<-1<<endl;
else print(n,1);
}
int main(){
read();
return 0;
}
转载于:https://www.cnblogs.com/zhaozhe/archive/2011/05/31/2064055.html