#include <bits/stdc++.h>
using namespace std;
vector<int>edges[100];
stack<int>q;
vector<int>item;
int level[100],parent[100],visited[100],tn,v[100];
void dfs(int s)
{
int j, k, fr;
q.push(s);
level[s] = 0;
for (j = 1; j <= tn; j++)
{
visited[j] = 0;
}
for (j = 1; j <= tn; j++)
{
v[j] = 0;
}
v[s]=1;
while (!q.empty())
{
fr = q.top();
q.pop();
if (0 == visited[fr])
{
visited[fr] = 1;
item.push_back(fr);
for (k = 0; k <edges[fr].size(); k++)
{
q.push(edges[fr][k]);
}
}
for(k=0;k<edges[fr].size();k++)
{
if(v[edges[fr][k]]==0)
{
level[edges[fr][k]]=level[fr]+1;
parent[edges[fr][k]]=fr;
v[edges[fr][k]]=1;
}
}
}
}
int main()
{
int i,e,p,n,u,v,f,m;
cout<<"Enter Total Nodes And Edges="<<endl;
cin>>tn>>e;
for(i=1;i<=e;i++)
{
cin>>u>>v;
edges[u].push_back(v);
edges[v].push_back(u);
}
cout<<"Enter 1st node"<<endl;
cin>>f;
dfs(f);
cout<<"Sequence="<<endl;
for(m=0;m<item.size();m++)
{
cout<<item[m]<<" ";
}
cout<<endl;
cout<<"Enter Node to know shortest path"<<endl;
cin>>n;
cout<<"Shortest Path is="<<level[n]<<endl;
cout<<"Enter Node To Know its Parent"<<endl;
cin>>p;
cout<<"Parent is="<<parent[p]<<endl;
return 0;
}
Alternative Way for DFS : DFS Recursion
Download Coding Interview Book and Get More Tutorials for Coding and Interview Solution: Click Here
Download System Design Interview Book and Get More Tutorials and Interview Solution: Click Here
Do you need more Guidance or Help? Then Book 1:1 Quick Call with Me: Click Here
I am Ashadullah Shawon. I am a Software Engineer. I studied Computer Science and Engineering (CSE) at RUET. I Like To Share Knowledge. Learn More:
Click Here
0 comments:
Post a Comment