Breadth First Search

#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);
}

0 comments: (+add yours?)