POJ 2457 BFS

来源:互联网 发布:nx车铣复合加工编程书 编辑:程序博客网 时间:2024/06/05 06:10

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

//By SiriusRen#include <queue>#include <cstdio>#include <cstring>#include <algorithm>using namespace std;#define N 100500int 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\n",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\n",dis[k]+1),dfs(k);    else puts("-1");}

这里写图片描述

0 0
原创粉丝点击