POJ 2457 BFS

题意:
这里写图片描述
这里写图片描述
说人话:
从A到B连边 找从1到k的最短路 并输出路径(随便一条即可 )
如果不能到达 输出-1
思路:

//By SiriusRen
#include <queue>
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
#define N 100500
int n,k,xx,yy,first[N],next[N],w[N],v[N],tot,vis[N],dis[N],zhuan[N];
void add(int x,int y){v[tot]=y,next[tot]=first[x],first[x]=tot++;}
void bfs(){
    queue<int>q;q.push(1);
    memset(dis,0x3f,sizeof(dis));dis[1]=0;
    while(!q.empty()){
        int x=q.front();q.pop();
        if(vis[x])continue;
        vis[x]=1;
        for(int i=first[x];~i;i=next[i])
            if(!vis[v[i]]&&dis[v[i]]>dis[x]+1){
                zhuan[v[i]]=x;
                dis[v[i]]=dis[x]+1;
                q.push(v[i]);
            }
    }
}
void dfs(int x){
    if(!x)return;
    dfs(zhuan[x]);
    printf("%d
",x);
}
int main(){
    memset(first,-1,sizeof(first));
    scanf("%d%df",&n,&k);
    for(int i=1;i<=n;i++)scanf("%d%d",&xx,&yy),add(xx,yy);
    bfs();
    if(dis[k]<=0x3ffffff)printf("%d
",dis[k]+1),dfs(k);
    else puts("-1");
}

这里写图片描述

原文地址:https://www.cnblogs.com/SiriusRen/p/6532203.html