#include <iostream>
#include <cstdio>
#include <vector>
#include <queue>
using namespace std;
#define siz 1000005
vector <int> vec[siz];
vector <int> path;
queue <int> q;
bool color[siz];
int cost[siz],parent[siz];
int node,edge;
void reset(){
for(int i=0;i<=node;i++){
color[i]=false;
cost[i]=0;
vec[i].clear();
}
}
void BFS(int source, int destination){
cost[source]=0;
color[source]=1;
parent[source]=source;
q.push(source);
while(!q.empty()){
int u=q.front();
q.pop();
for(int i=0;i<vec[u].size();i++){
int v=vec[u][i];
if(!color[v]){
color[v]=1;
cost[v]=cost[u]+1;
parent[v]=u;
q.push(v);
}
}
}
}
void pathPrint(int source, int destination){
int n=destination;
path.push_back(destination);
while(true){
if(parent[n]==source) break;
path.push_back(parent[n]);
n=parent[n];
}
path.push_back(source);
for(int i=0;i<path.size();i++){
if(i) printf("=>");
printf("%d",path[i]);
}
path.clear();
}
int main()
{
int u,v;
freopen("input.txt","r",stdin);
while(scanf("%d%d",&node,&edge)==2){
reset();
for(int i=0;i<edge;i++){
scanf("%d%d",&u,&v);
vec[u].push_back(v);
vec[v].push_back(u);
}
BFS(1,node);
pathPrint(1,node);
}
return 0;
}
Wednesday, October 31, 2012
Breadth First Search (BFS) Path Printing
Subscribe to:
Post Comments (Atom)
No comments:
Post a Comment