Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<iostream>
- #include<queue>
- using namespace std;
- int vertex,edge,source,adjacency_matrix[100][100],parent[100],Distance[100];
- string color[100];
- queue<int> qe;
- queue<int> result;
- void inputGraph();
- void initialize();
- void doBFS();
- void printAll();
- void printPath();
- //void printAdjacencyMatrix();
- //void printColor();
- //void printDistance();
- //void printParent();
- int main(void)
- {
- inputGraph();
- initialize();
- doBFS();
- printPath();
- //printAll();
- return 0;
- }
- void inputGraph()
- {
- cout<<"Total vertex : ";
- cin>>vertex;
- cout<<"Total edge : ";
- cin>>edge;
- int i,j;
- for(i=1; i<=edge; i++)
- {
- int start,finish;
- cout<<"Enter start and end node for edge "<<i<<" : ";
- cin>>start;
- cin>>finish;
- adjacency_matrix[start][finish]=1;
- adjacency_matrix[finish][start]=1;
- }
- cout<<"The adjacency matrix is : "<<endl;
- for(i=1; i<=vertex; i++)
- {
- for(j=1; j<=vertex; j++)
- {
- cout<<adjacency_matrix[i][j]<<" ";
- }
- cout<<endl;
- }
- }
- void initialize()
- {
- cout<<"Enter source node : ";
- cin>>source;
- int i,j;
- for(j=1; j<=vertex; j++)
- {
- color[j]="white";
- Distance[j]=INT_MAX;
- parent[j]=0;
- }
- color[source]="grey";
- Distance[source]=0;
- parent[source]=0;
- }
- void doBFS()
- {
- int i,j;
- qe.push(source);
- while(qe.size()!=0)
- {
- int node = qe.front();
- qe.pop();
- for(j=1; j<=vertex; j++)
- {
- if(adjacency_matrix[node][j]==1)
- {
- if(color[j]=="white")
- {
- color[j]="grey";
- Distance[j]=Distance[node]+1;
- parent[j]=node;
- qe.push(j);
- }
- }
- }
- color[node]="black";
- //extra line for printing path
- result.push(node);
- }
- }
- void printPath()
- {
- cout<<"Path :"<<endl;
- int i;
- for(i=0;i<=result.size();i++)
- {
- cout<<result.front()<<" -> ";
- result.pop();
- }
- cout<<" End"<<endl;
- }
- /*
- void printAll()
- {
- int i,j;
- //adjacency matrix
- cout<<"The adjacency matrix is : "<<endl;
- for(i=1; i<=vertex; i++)
- {
- for(j=1; j<=vertex; j++)
- {
- cout<<adjacency_matrix[i][j]<<" ";
- }
- cout<<endl;
- }
- //color
- cout<<"Color : "<<endl;
- for(j=1; j<=vertex; j++)
- {
- cout<<"Color of node "<<j<<" is : "<<color[j]<<endl;
- }
- cout<<endl;
- //distance
- cout<<"Distance : "<<endl;
- for(j=1; j<=vertex; j++)
- {
- cout<<"Distance of node "<<j<<" is : "<<Distance[j]<<endl;
- }
- cout<<endl;
- //parent
- cout<<"Parent : "<<endl;
- for(j=1; j<=vertex; j++)
- {
- cout<<"Parent of node "<<j<<" is : "<<parent[j]<<endl;
- }
- cout<<endl;
- }
- void printAdjacencyMatrix()
- {
- int i,j;
- //adjacency matrix
- cout<<"The adjacency matrix is : "<<endl;
- for(i=1; i<=vertex; i++)
- {
- for(j=1; j<=vertex; j++)
- {
- cout<<adjacency_matrix[i][j]<<" ";
- }
- cout<<endl;
- }
- }
- void printColor()
- {
- int j;
- //color
- cout<<"Color : "<<endl;
- for(j=1; j<=vertex; j++)
- {
- cout<<"Color of node "<<j<<" is : "<<color[j]<<endl;
- }
- cout<<endl;
- }
- void printDistance()
- {
- int j;
- //distance
- cout<<"Distance : "<<endl;
- for(j=1; j<=vertex; j++)
- {
- cout<<"Distance of node "<<j<<" is : "<<Distance[j]<<endl;
- }
- cout<<endl;
- }
- void printParent()
- {
- int j;
- //parent
- cout<<"Parent : "<<endl;
- for(j=1; j<=vertex; j++)
- {
- cout<<"Parent of node "<<j<<" is : "<<parent[j]<<endl;
- }
- cout<<endl;
- }
- */
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement