主要思路:
1. 用一个包含坐标和方向的结点数据类型来存储迷宫中的结点;
2. 将当前结点压入路径栈,探测该结点各方向是否存在通路;
3. 若存在通路,则修改该结点方向为通路方向;
4. 若不存在通路,则将当前结点出栈(实现路径回溯),继续探测上一个通路结点的剩余方向的通路情况,直至找到通路或发现该迷宫无通路,结束进程。
关键:
要注意迷宫边界点方向探测的条件限定,否则会产生不可预测的结果。
/*-----------------------------------------------
功能:迷宫问题,寻找一条简单通路(无重复路径)
输出示例:
The path from (0, 0) to (5, 5) is:
(0, 0) -> (0, 1) -> (1, 1) -> (2, 1) -> (2, 2) ->
(2, 3) -> (3, 3) -> (4, 3) -> (4, 4) -> (4, 5) ->
(5, 5)
Author: Zhang Kaizhou
Date: 2019-3-7 17:34:41
------------------------------------------------*/
#include <stdio.h>
#include <stdlib.h>
#define MAXSIZE 1000
#define N 6
int maze[N][N] = {
{0, 0, 1, 1, 1, 1},
{1, 0, 1, 1, 1, 1},
{1, 0, 0, 0, 1, 1},
{1, 1, 1, 0, 1, 1},
{1, 1, 1, 0, 0, 0},
{1, 1, 1, 1, 1, 0}}; // 用一个全局二维数组构造迷宫,0为通路
typedef struct{ // 定义迷宫中的一个点数