C语言用栈实现迷宫求解

大学的实训课,要求做一个迷宫,其中墙用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++)

  &

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值