//Write a program to check whether two graphs are
//isomorphic to each other or not.
#include<bits/stdc++.h>
using namespace std;
int v1,v2,e1,e2;
bool deg(vector< vector<int> >gph1,vector<
vector<int> > gph2)
{
vector<int>
degree1(gph1.size()),degree2(gph2.size());
for(int i=0;i<gph1.size();i++)
{
degree1[gph1[i].size()]++;
degree2[gph2[i].size()]++;
}
for(int i=0;i<gph1.size();i++)
if(degree1[i]!=degree2[i]) return false;
return true;
}
bool Is_isomorphic(vector< vector<int> > gph1,vector<
vector<int> > gph2)
{
if(v1==v2 && e1==e2 && deg(gph1,gph2))
return true;
return false;
}
int main()
{
cout<<"Enter The No. of Vertices and Edges for First
graph\n";
cin>>v1>>e1;
cout<<"Enter Adjacency List for First Graph: \n";
//cout<<"Enter The Adjacency List for First Graph: ";
vector <vector<int> > gph1(v1);
int vert1,vert2;
for(int i=0;i<e1;i++)
{
cin>>vert1>>vert2;
gph1[vert1].push_back(vert2);
gph1[vert2].push_back(vert1);
}
cout<<"\nEnter The No. of Vertices, Edges for second
graph \n";
cin>>v2>>e2;
cout<<"Enter Adjacency List for Second Graph: \n";
//cout<<"Enter The Adjacency List for Second Graph:
";
vector <vector<int> > gph2(v2);
for(int i=0;i<e2;i++)
{
cin>>vert1>>vert2;
gph2[vert1].push_back(vert2);
gph2[vert2].push_back(vert1);
}
if(Is_isomorphic(gph1,gph2))
cout<<"\nBoth the graphs are Isomorphic\n";
else
cout<<"\nBoth graphs are not Isomorphic\n";
}
Comments
Post a Comment