Files
suanfa/c/final/visit4chardigui.c
T

39 lines
1.1 KiB
C
Raw Normal View History

2026-06-14 23:45:55 +08:00
#include <stdio.h>
#include <stdbool.h>
#define NUM_PLACES 4
// 回溯函数:尝试构建所有可能的路径组合,A 总是紧跟 B
void backtrack(int *path, bool used[NUM_PLACES], int step)
{
if (step >= NUM_PLACES)
{ // 边界条件:当步骤数等于地点数时打印路径
for (int i = 0; i < NUM_PLACES; ++i)
printf("%c", 'A' + path[i]);
printf("\n");
return;
}
// 如果还有足够的空间,尝试放置 A 和 B 作为一对
if (step + 1 < NUM_PLACES && !used[0] && !used[1]) {
path[step] = 0; // 放置 A
path[step + 1] = 1; // 放置 B
used[0] = used[1] = true;
backtrack(path, used, step + 2);
used[0] = used[1] = false;
}
// 尝试放置 C 或 D
for (int i = 2; i < NUM_PLACES; ++i) {
if (!used[i]) {
path[step] = i;
used[i] = true;
backtrack(path, used, step + 1);
used[i] = false;
}
}
}
int main(){
int path[NUM_PLACES];
bool used[NUM_PLACES] = {false};
// 开始回溯,从一个空路径开始
backtrack(path, used, 0);
return 0;
}