Hamiltonian Cycle
SOURCE CODE:
#include<stdio.h>
int x[20]={0},G[20][20]={0},n;
void nextValue(int k){
int j;
while(1){
x[k]=(x[k]+1)%(n+1);
if(x[k]==0)
return ;
if(G[x[k-1]][x[k]] != 0){
for(j=1;j<=k-1;j++){
if(x[j] == x[k])
break;}
if((j==k)&&((k<n)||((k==n)&&(G[x[n]][x[1]]!=0))))
return;
}
}
}
void hamiltonian(int k){
int i;
while(1){
nextValue(k);
if(x[k]==0)
return;
if(k==n){
printf("\n");
for(i=1;i<=n;i++)
printf("%d->",x[i]);
printf("%d",x[1]);
}
else{
hamiltonian(k+1);
}
}
}
int main(){
int i,j,v1,v2,edge;
printf("Enter # of vertices:\n");
scanf("%d",&n);
printf("Enter # of edges :\n");
scanf("%d",&edge);
/* for(i=1;i<=n;i++)
for(j=1;j<=n;j++){
G[i][j]=0;
x[i]=0;
}*/
for(i=1;i<=edge;i++){
printf("\nEnter edge %d :",i);
scanf("%d%d",&v1,&v2);
G[v1][v2]=1;G[v2][v1]=1;
}
x[1]=1;
printf("\nHamiltonian cycle :\n");
hamiltonian(2);
return 0;
}
OUTPUT:
Enter # of vertices:
5
Enter # of edges :
7
Enter edge 1 : 1 2
Enter edge 2 : 1 4
Enter edge 3 : 2 3
Enter edge 4 : 2 4
Enter edge 5 : 2 5
Enter edge 6 : 3 5
Enter edge 7 : 4 5
Hamiltonian cycle :
1->2->3->5->4->1
1->4->5->3->2->1
#include<stdio.h>
int x[20]={0},G[20][20]={0},n;
void nextValue(int k){
int j;
while(1){
x[k]=(x[k]+1)%(n+1);
if(x[k]==0)
return ;
if(G[x[k-1]][x[k]] != 0){
for(j=1;j<=k-1;j++){
if(x[j] == x[k])
break;}
if((j==k)&&((k<n)||((k==n)&&(G[x[n]][x[1]]!=0))))
return;
}
}
}
void hamiltonian(int k){
int i;
while(1){
nextValue(k);
if(x[k]==0)
return;
if(k==n){
printf("\n");
for(i=1;i<=n;i++)
printf("%d->",x[i]);
printf("%d",x[1]);
}
else{
hamiltonian(k+1);
}
}
}
int main(){
int i,j,v1,v2,edge;
printf("Enter # of vertices:\n");
scanf("%d",&n);
printf("Enter # of edges :\n");
scanf("%d",&edge);
/* for(i=1;i<=n;i++)
for(j=1;j<=n;j++){
G[i][j]=0;
x[i]=0;
}*/
for(i=1;i<=edge;i++){
printf("\nEnter edge %d :",i);
scanf("%d%d",&v1,&v2);
G[v1][v2]=1;G[v2][v1]=1;
}
x[1]=1;
printf("\nHamiltonian cycle :\n");
hamiltonian(2);
return 0;
}
OUTPUT:
Enter # of vertices:
5
Enter # of edges :
7
Enter edge 1 : 1 2
Enter edge 2 : 1 4
Enter edge 3 : 2 3
Enter edge 4 : 2 4
Enter edge 5 : 2 5
Enter edge 6 : 3 5
Enter edge 7 : 4 5
Hamiltonian cycle :
1->2->3->5->4->1
1->4->5->3->2->1
Comments
Post a Comment