本项目运用C语言编程技术,构建并解决迷宫问题。通过算法实现寻找迷宫中所有可能路径,并进一步确定从起点到终点的最短路径方案。
以下是经过优化后的C语言代码片段:
```c
#include
#include
#define N1 9 // 定义迷宫行数为9
#define N2 8 // 定义迷宫列数为8
// 总路径节点数量定义,T = N1 * N2
#define T (N1*N2)
// 移动方向的数量,M=4(上下左右)
#define M 4
char B[N1+1][N2+1]; // 定义迷宫数组
int count=0; // 记录路径条数
typedef struct node {
int a1;
int a2;
} find, direct[M+1];
// 结构体定义,用于存储栈中的位置信息和识别符
typedef struct site {
int b1;
int b2;
int id;
};
// 定义顺序栈结构体
typedef struct Stack {
site ht[T]; // 栈元素数组
int top; // 当前栈顶指针,初始化时为0表示空栈状态
}Stack;
void Push(Stack *s, int a, int b) {
s->ht[++(s->top)].b1 = a;
s->ht[s->top].b2 = b;
}
// 主函数入口
int main() {
char a[T+1]; // 用于存储迷宫信息的数组
Stack *s1, *s2; // 定义两个栈,分别记录所有路径和最短路径
direct f1;
s1 = (Stack *)malloc(sizeof(Stack));
s2 = (Stack *)malloc(sizeof(Stack));
int x1,x2,y1,y2,k;
s1->top=0; // 初始化s1为一个空栈
s2->top=0;
create(a);
printf(\n\n请输入入口坐标: );
scanf(%d%d,&x1,&x2);
printf(请输入出口坐标: );
scanf(%d%d,&y1,&y2);
char filename1[20],filename2[20]; // 文件名输入
printf(请输入存储所有路径的文件名:);
scanf(%s,filename1);
printf(\n请输入存储最短路径的文件名:);
scanf(%s,filename2);
system(cls);
k=search(x1,x2,y1,y2,s1,s2,f1,filename1);
if(k==1)
Print(s2, filename2); // 输出最短路径
return 0;
}
// 创建迷宫函数,读取文件信息到二维数组B中
void create(char a[]) {
FILE *fp = fopen(maze.txt, r);
int i=0,j;
if ( fp == NULL)
printf(\n无法打开文件!\n);
else {
while (!feof(fp)) {
fscanf(fp, %c,&a[i++]);
if(a[i-1] == \n) a[--i++] = ;
}
fclose(fp);
}
for(i=0; i<=N1; ++i) {
B[i][0]= ;
}
for(j=0;jht[++(s1->top)].b1 = x;