大学的实训课,要求做一个迷宫,其中墙用1标注,通路用0标注,然后寻找一个从默认起点1,1到默认终点8,8的通路。发现网上有好多类似的其实都用不了,于是乎自己缝缝补补出了一个能用的,注解写的比较全,可以参考一下。
//<!——三个头文件——!>
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
//宏定义,定义行列元素个数和最大尺寸
#define MaxSize 1000
#define line 10
#define list 10
//定义结构体,叫Step i是行,j是列,di是它如何行动,0是向右,1是向下,2是向左,3是向上(具体原因后面有说明)
typedef struct
{
int i; //行
int j; //列
int di; //行动
}Step;
//定义一个顺序栈,叫StType,其中包含一个由box组成的数组,和栈的头指针top
typedef struct
{
Step data[MaxSize]; //一个数组,元素所在的行列和行动方向记在这里。
int top; //栈顶指针
}Stack;
//<!----------------------------------给迷宫数组赋值的函数---------------------------------------!>
void SetupMaze(int a[line][list])
{
//<无法对已构建的数组整体赋值,所以这里给每个元素赋值,这个函数要在打印迷宫之前和解出路径之后调用。>
//<!-----------------------因为输出完路径以后数组里面含-1,无法正常运作--------------------------!>
a[0][0]=1; a[1][0]=1; a[2][0]=1; a[3][0]=1; a[4][0]=1; a[5][0]=1; a[6][0]=1; a[7][0]=1;
a[8][0]=1; a[9][0]=1; a[10][0]=1; a[0][1]=1; a[1][1]=0; a[2][1]=1; a[3][1]=1; a[4][1]=1;
a[5][1]=0; a[6][1]=0; a[7][1]=0; a[8][1]=0; a[9][1]=1; a[10][1]=1; a[0][2]=1; a[1][2]=0;
a[2][2]=1; a[3][2]=1; a[4][2]=1; a[5][2]=0; a[6][2]=1; a[7][2]=1; a[8][2]=0; a[9][2]=1;
a[10][2]=1; a[0][3]=1; a[1][3]=0; a[2][3]=0; a[3][3]=1; a[4][3]=1; a[5][3]=0; a[6][3]=1;
a[7][3]=1; a[8][3]=0; a[9][3]=1; a[10][3]=1; a[0][4]=1; a[1][4]=1; a[2][4]=0; a[3][4]=0;
a[4][4]=1; a[5][4]=0; a[6][4]=1; a[7][4]=1; a[8][4]=0; a[9][4]=1; a[10][4]=1; a[0][5]=1;
a[1][5]=1; a[2][5]=1; a[3][5]=0; a[4][5]=0; a[5][5]=0; a[6][5]=1; a[7][5]=1; a[8][5]=0;
a[9][5]=1; a[10][5]=1; a[0][6]=1; a[1][6]=1; a[2][6]=1; a[3][6]=1; a[4][6]=1; a[5][6]=1;
a[6][6]=1; a[7][6]=1; a[8][6]=0; a[9][6]=1; a[10][6]=1; a[0][7]=1; a[1][7]=1; a[2][7]=1;
a[3][7]=1; a[4][7]=1; a[5][7]=1; a[6][7]=1; a[7][7]=1; a[8][7]=0; a[9][7]=1; a[10][7]=1;
a[0][8]=1; a[1][8]=1; a[2][8]=1; a[3][8]=1; a[4][8]=1; a[5][8]=1; a[6][8]=1; a[7][8]=1;
a[8][8]=0; a[9][8]=1; a[10][8]=1; a[0][9]=1; a[1][9]=1; a[2][9]=1; a[3][9]=1; a[4][9]=1;
a[5][9]=1; a[6][9]=1; a[7][9]=1; a[8][9]=1; a[9][9]=1; a[10][9]=1; a[0][10]=1; a[1][10]=1;
a[2][10]=1; a[3][10]=1; a[4][10]=1; a[5][10]=1; a[6][10]=1; a[7][10]=1; a[8][10]=1; a[9][10]=1;
a[10][10]=1;
}
//</!---------------------------------给迷宫数组赋值的函数---------------------------------------!>
//<!---------------------------------------逐行输出迷宫 ------------------------------------------!>
void PrintMaze(int a[line][list])
{
int n,m;
printf("输出迷宫:\n");
for(m=0;m<line;m++) //用循环列出每个元素
{
for(n=0;n<list;n++)
&