代码:
int arc[10][10];
void Hamiton(int x[], int n) {
int i, k;
int visited[10]; //假设图中最多有10个顶点
for (i = 0; i < n; i++) {
x[i] = 0; //初始化回路的顶点数组和标志数组
visited[i] = 0;
}
x[0] = 0; //从顶点0出发
visited[0] = 1;
k = 1;
while (k >= 1) {
x[k] = x[k] + 1; //搜索下一个顶点
while (x[k] < n) {
if (visited[x[k]] == 0 && arc[x[k - 1]][x[k]] == 1) {
break;
}
else {
x[k] = x[k] + 1;
}
}
if (x[k] < n && k == n - 1 && arc[x[k]][0] == 1) {
for (k = 0; k < n; k++) {
cout << x[k] + 1 << " "; //输出顶点的编号,从1开始
}
return;
}
if (x[k] < n && k < n - 1) {
visited[x[k]] = 1;
k = k + 1;
}
else { //回溯
visited[x[k]] = 0;
x[k] = 0;
k = k - 1;
}
}
}