C++ 数据结构求解迷宫问题(栈)

一、问题描述

 以一个m*n的长方阵表示迷宫,0和1分别表示迷宫中的通路和障碍。设计一个程序,对任意设定的迷宫,求出一条从入口到出口的通路,或得出没有通路的结论。

二、基本要求

首先实现一个以链表作存储结构的栈类型,然后编写一个求解迷宫的非递归程序。求得的通路以三元组(i,j,d)的形式输出,其中:(i,j)指示迷宫中的一个坐标,d表示走到下一坐标的方向,如:对于下列数据的迷宫,输出的一条通路为:(1,1,1),(1,2,2),(3,2,3),(3,1,2),…。

三、求解思路

1、定义迷宫数据结构: 使用一个二维数组来表示迷宫,其中0表示通路,1表示障碍。另外,我们需要追踪迷宫中的访问情况,以及路径上的步骤和方向信息。

2、使用非递归方式搜索路径: 可以使用一个栈来辅助搜索迷宫的路径。

3、输出路径信息: 当找到终点时,栈中保存了从起点到终点的路径信息。我们可以依次从栈中取出路径上的点坐标和方向信息,并输出为三元组的形式(i,j,d),表示每一步的位置和方向。

4、处理无通路情况: 如果栈为空而仍未找到终点,则说明没有从起点到终点的通路。

5、其他辅助函数: 在程序中还需要实现一些辅助函数,比如判断下一个位置是否合法,初始化迷宫,输出迷宫等。这些函数在搜索路径时会被调用。

四、求解代码:

#include <cstdio>
#include <algorithm>
#include <cstring>
using namespace std;//对于操作返回值以及链栈进行宏定义
#define TRUE 1
#define FALSE 0
#define OK 1
#define ERROR 0
#define INFEASIBLE -1
#define OVERFLOW -2
#define STACK_INIT_SIZE 100
#define STACKINCREMENT 10
#define MAXSIZE 100
#include <stdio.h>
/*----------------------------------*/
/*数据类型的定义*/
typedef int Status;
typedef int Boolean;
typedef struct{
    int x,y,dir;
}point; // 点坐标的xy,以及下一步方向dir定义

typedef struct node{
    point point;
    struct node* next;
}Node; // 对于链栈中节点的定义
typedef Node ElemType;
typedef struct{
    Node * top;
    Node * bottom;
}Linkstack,*pLinkstack; // 对于链栈整体的定义

int NoSoutionReason = 0; //1 代表起点为障碍,2代表重点为障碍
i
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值