#include<bits/stdc++.h>
using namespace std;
int n,s,d;
int cost[100],color[100],adj[50][50];
int par[100];
void path(int v)
{
if (s==v)
{
printf("%d ",s);
return;
}
else if (par[v]==0)
{
printf("No path\n");
}
else
{
path(par[v]);
printf("--> %d ",v);
}
}
void bfs(int s)
{
memset(color,0,sizeof(color));
memset(cost,0,sizeof(cost));
queue<int>Q;
color[s]=1;
cost[s]=0;
Q.push(s);
while (!Q.empty())
{
int u=Q.front();
Q.pop();
for (int i=1; i<=n; i++)
{
if (adj[u][i]==1 && color[i]==0)
{
cost[i]=cost[u]+1;
color[i]=1;
Q.push(i);
par[i]=u;
}
}
}
}
int main()
{
int edge;
scanf("%d %d",&n,&edge);
int u,v;
memset(adj,0,sizeof(adj));
for (int i=1; i<=edge; i++)
{
scanf("%d %d",&u,&v);
adj[u][v]=1;
adj[v][u]=1;
}
printf("source and destination\n");
scanf("%d %d",&s,&d);
bfs(s);
printf("cost= %d\n",cost[d]);
path(d);
}
using namespace std;
int cost[100],color[100],adj[50][50];
int par[100];
void path(int v)
{
if (s==v)
{
printf("%d ",s);
return;
}
else if (par[v]==0)
{
printf("No path\n");
}
else
{
path(par[v]);
printf("--> %d ",v);
}
}
void bfs(int s)
{
memset(color,0,sizeof(color));
memset(cost,0,sizeof(cost));
queue<int>Q;
color[s]=1;
cost[s]=0;
Q.push(s);
while (!Q.empty())
{
int u=Q.front();
Q.pop();
for (int i=1; i<=n; i++)
{
if (adj[u][i]==1 && color[i]==0)
{
cost[i]=cost[u]+1;
color[i]=1;
Q.push(i);
par[i]=u;
}
}
}
}
int main()
{
int edge;
scanf("%d %d",&n,&edge);
int u,v;
memset(adj,0,sizeof(adj));
for (int i=1; i<=edge; i++)
{
scanf("%d %d",&u,&v);
adj[u][v]=1;
adj[v][u]=1;
}
printf("source and destination\n");
scanf("%d %d",&s,&d);
bfs(s);
printf("cost= %d\n",cost[d]);
path(d);
}
0 comments: (+add yours?)
Post a Comment