برنامه تشخیص همبند یا ناهمبند بودن گراف و همیلتونی
#include
#include
#include
#include
main(){
int ras[50],deg[50],v[50][50];
int yy[50][50];
int a,sum,b,c,p,max;
int x,z,y,j,i,o,s;
int sam[50],dig[50];
int xx=0,zz=0,cc=0,vv=0;
int dog[50];
textcolor(11);
textbackground(5);
clrscr();
printf("\n\n IN THE NAME OF GOD");
printf("\n\n THE PROJ OF GRAPH WRITTEN BY:");
printf("\n\n ");
printf("\n\n\n PRESS ANY KEY TO CONTINUE.");
getch();
textcolor(10);
textbackground(9);
clrscr();
printf("HOW MANY RAS :");
scanf("%d",&a);
printf("ENTER MATRIS :\n");
for(i=1;i<=a;i++){
for(j=1;j<=a;j++){
printf("V[%d][%d] : ",i,j);
scanf("%d",&v[i][j]);
yy[i][j]=v[i][j];
if(i==j)yy[i][j]=0;
if(i!=j)if(a!=2)if(yy[i][j]>0)yy[i][j]=1;
if(a==2)if(v[i][j]>2)yy[i][j]=2;}
printf("\n");}
textcolor(15);
textbackground(4);
clrscr();
/******************calculat****************************/
for(i=1;i<=a;i++){
sam[i]=0;
for(j=1;j<=a;j++){
sam[i]+=v[i][j];
if(i==j)sam[i]+=v[i][j];}
if((sam[i]%2)==0)xx+=1;else{ zz+=1;
if(sam[i]>2)vv+=1;}
}
/********************/
for(i=1;i<=a;i++){
dig[i]=0;
for(j=1;j<=a;j++){
dig[i]+=v[j][i];
if(i==j)dig[i]-=v[j][i];}
if(dig[i]==0)cc+=1;}
/********************/
for(i=1;i<=a;i++){
dog[i]=0;
for(j=1;j<=a;j++)
dog[i]+=yy[j][i];}
for(i=1;i<=a;i++)
for(j=1;j<=a;j++){
if(i!=j) if(yy[i][j]!=0) if(dog[j]>2) if(dog[i]>2)
{yy[i][j]-=1;yy[j][i]-=1;
dog[i]-=1;dog[j]-=1; }}
/*************************************************/
if(((zz)%2)!=0)printf("\n\n*********** INVALID GRAPH *************\n");
else{
if(cc!=0){printf("\nGRAPH IS NOT HAMBAND & HAS NOT DOUR");}
else{if(a==0)printf("\n\n*********** INVALID GRAPH *************\n");
else{
printf("\nGRAPH HAS EULERY MASIR\n");
if(xx!=a)printf("\nGRAPH HAS NOT EULERY DOUR\n");
else{
/************************* eulery dour ****************/
printf("\nEULERY DOUR IS : \n");
sum=0;i=1;j=1;
printf("V1");
GAIN:
for(b=1;b<=a;b++)
for(c=1;c<=a;c++)
sum+=v[b][c];
if(sum!=0){
if(i==j){
while(v[i][j]!=0){
printf(" V%d",j);
v[i][j]--;
}}
p=1;
for(x=1;x<=a;x++)
if(v[i][x]!=0){
ras[p]=x;
p++;}
for(y=1;y<=a;y++){
deg[y]=0;
for(z=1;z<=a;z++){
deg[y]+=v[y][z];
if(y==z)
deg[y]+=v[y][z];}}
max=0;
for(x=1;x<=(p-1);x++)
if((max)<=(deg[ras[x]]))
max=ras[x];
if(max==0)
goto main;
printf(" V%d",max);
v[i][max]--;
v[max][i]--;
j=max;i=max;
goto GAIN;
}
main:
}
/***************************************/
if(vv!=0)printf("\n\nGRAPH HAS NOT HAMILTON DOUR\n");
else{if(vv!=zz)printf("\n\nGRAPH HAS NOT HAMILTON DOUR\n");
else{
/***************************************/
printf("\n\nHAMILTON DOUR IS :\n");
/************************* hamilton dour ****************/
sum=0;i=1;j=1;
printf("V1");
G:
for(b=1;b<=a;b++)
for(c=1;c<=a;c++)
sum+=yy[b][c];
if(sum!=0){
if(i==j){
while(yy[i][j]!=0){
printf(" V%d",j);
yy[i][j]--;
}}
p=1;
for(x=1;x<=a;x++)
if(yy[i][x]!=0){
ras[p]=x;
p++;}
for(y=1;y<=a;y++){
deg[y]=0;
for(z=1;z<=a;z++){
deg[y]+=yy[y][z];
if(y==z)
deg[y]+=yy[y][z];}}
max=0;
for(x=1;x<=(p-1);x++)
if((max)<=(deg[ras[x]]))
max=ras[x];
if(max==0)
goto maxi;
printf(" V%d",max);
yy[i][max]--;
yy[max][i]--;
j=max;i=max;
goto G;
}
maxi:
if(a>3)if((a%2)!=0)if(max!=1)printf(" V1");
}}}}}
getch();
}
/*************************************/