初学回溯,哈密尔顿回路问题的实现

来源:互联网 发布:access数据库培训 编辑:程序博客网 时间:2024/05/16 13:43
#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;elsex[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");}

0 0
原创粉丝点击