使用C语言并用递归函数设计一个解哈密尔顿回路的回溯算法
时间: 2024-05-05 16:18:50 浏览: 138
好的,我可以回答这个问题。以下是使用C语言并用递归函数设计一个解哈密尔顿回路的回溯算法的代码实现:
```C
#include <stdio.h>
#define MAX_SIZE 20
int n; // 顶点个数
int graph[MAX_SIZE][MAX_SIZE]; // 图的邻接矩阵
int path[MAX_SIZE]; // 当前走过的路径
int visited[MAX_SIZE]; // 标记各个顶点是否已访问
int count = 0; // 已访问的顶点数
void hamilton(int v) {
int i;
if (count == n) { // 所有顶点都已访问,打印路径
printf("Hamilton path: ");
for (i = 0; i < n; i++)
printf("%d ", path[i]);
printf("%d\n", path[0]); // 回到起点形成回路
}
else {
for (i = 0; i < n; i++) { // 遍历所有顶点
if (graph[v][i] && !visited[i]) { // 如果连通且未访问
visited[i] = 1; // 标记为已访问
path[count++] = i; // 将该顶点加入路径
hamilton(i); // 递归访问下一个顶点
visited[i] = 0; // 递归返回后取消标记
count--; // 递归返回后路径长度减少
}
}
}
}
int main() {
int i, j;
printf("Enter the number of vertices: ");
scanf("%d", &n);
printf("Enter the adjacency matrix:\n");
for (i = 0; i < n; i++) {
for (j = 0; j < n; j++)
scanf("%d", &graph[i][j]);
}
for (i = 0; i < n; i++) // 从每个顶点开始进行搜索
hamilton(i);
return 0;
}
```
如果您有其他问题,欢迎继续提出。
阅读全文