#include<stdio.h>
void hamilton(int n, int x[], int c[100][100]) {
int i, k;
int *s = malloc(n*sizeof(int));
for (i = 0; i < n; i++) {
x[i] = -1;
s[i] = 0;
}
k = 1;
s[0] = 1;
x[0] = 0;
while (k >= 0) {
x[k] = x[k] + 1;
while (x[k] < n){
if ((s[x[k]]==0) &&(c[x[k - 1]][x[k]]==1))
break;
else
x[k] = x[k] + 1;}
if ((x[k] < n)&&(k != n - 1)) {
s[x[k]] = 1;
k = k + 1;
}
else if ((x[k] < n)&&(k == n - 1) && c[x[k]][x[0]])
break;
else {
x[k] = -1;
k = k - 1;
s[x[k]] = 0;
}
}
}
void main() {
int n;
printf("Enter the n node:\n");
scanf("%d", &n);
int *x = malloc(sizeof(int)*n);
int c[100][100];
memset(c, 0, sizeof(c));
printf("Enter the m side:\n");
int m;
scanf("%d", &m);
int t1, t2;
printf("Enter the a and b if they are connected:\n");
for (int i = 0; i < m; i++) {
scanf("%d %d", &t1, &t2);
c[t1-1][t2-1] = 1;
c[t2-1][t1-1] = 1;
}
hamilton(n, x, c);
printf("Hamiltonian path:\n");
for (int i = 0; i < n; i++)
printf("%d->", x[i]+1);
printf("1\n");
}
初学回溯,哈密尔顿回路问题的实现
最新推荐文章于 2022-12-29 22:12:27 发布