You are on page 1of 2

// 0812016.cpp : Defines the entry point for the console application.

//

#include "stdafx.h"
#include "stdio.h"
#include "conio.h"
#define MAX 100

struct graph
{
int n;
int L[MAX][MAX];
};
typedef struct graph GRAPH;

GRAPH g;
int chuaxet[MAX];
int hamilton[MAX+1];
int soct, sodd;

int DocFile(char *s);


void CTHamilton(int lan);
void DDHamilton(int lan);
void InHamilton(int n);

void main()
{
if(!DocFile("input.txt"))
return;
for(int i=0; i<g.n; i++)
chuaxet[i] = 1;
soct = 0;
CTHamilton(1);
if(soct != 0)
printf("Do thi nay la do thi Hamilton.\n");
else
{
sodd = 0;
for (int x=0; x<g.n; x++)
{
hamilton[0] = x;
chuaxet[x] = 0;
DDHamilton(1);
}
if(sodd != 0)
printf("Do thi nay la do thi nua Hamilton.\n");
else
printf("Do thi nay khong co chu trinh hay duong di Hamilton!\n");
}
}

int DocFile(char *s)


{
FILE *f = fopen(s, "rt");
if(f == NULL)
{
perror("Cannot open file");
return 0;
}
fscanf(f, "%d", &g.n);
for(int i=0; i<g.n; i++)
for(int j=0; j<g.n; j++)
fscanf(f, "%d", &g.L[i][j]);
fclose(f);
return 1;
}

void CTHamilton(int lan)


{
hamilton[0] = 0;
chuaxet[0] = 0;
if(lan == g.n && g.L[hamilton[lan-1]][0] > 0)
{
soct++;
hamilton[lan] = 0;
printf("Chu trinh Hamilton thu %d: ", soct);
InHamilton(g.n+1);
}
else if(lan < g.n)
for(int y=0; y<g.n; y++)
if(g.L[hamilton[lan-1]][y] > 0 && chuaxet[y])
{
hamilton[lan] = y;
chuaxet[y] = 0;
CTHamilton(lan+1);
chuaxet[y] = 1;
}
}

void DDHamilton(int lan)


{
if(lan == g.n)
{
sodd++;
printf("Duong di Hamilton thu %d: ", sodd);
InHamilton(g.n);
}
else if(lan < g.n)
for(int y=0; y<g.n; y++)
if(g.L[hamilton[lan-1]][y] > 0 && chuaxet[y])
{
hamilton[lan] = y;
chuaxet[y] = 0;
DDHamilton(lan+1);
chuaxet[y] = 1;
}
}

void InHamilton(int n)
{
for(int i=0; i<n-1; i++)
printf("%d->", hamilton[i]);
printf("%d\n", hamilton[n-1]);
}

You might also like