迷宫算法及数据结构分析(by WIzaRD_ssc)

本文探讨了迷宫算法的分析,选择了栈作为数据结构记录路径,并详细描述了程序的实现过程,旨在解决计算机中的迷宫问题并展示求解路径。
摘要由CSDN通过智能技术生成

    关于迷宫,承载着我们童年中的点滴记忆。当然,那时候总有些迷宫册子,每本还有专门的主题(奥特曼,葫芦娃,铠甲勇士什么的= =)。而且不得不说,真是干一行爱一行,这些出册子的人,把迷宫这个游戏可是上升到了一个高度。就比如说什么“碰见怪兽了要折返”什么的。

    以上基于我们的童年,更基于那些“伟大的”迷宫设计设计师们。但是,在计算机行业领域中,我们更看重数据,以及对数据的运算和处理。所以 解决迷宫问题 就成了初学者对计算机编程技术及思想的一次质的飞跃。

    好,废话不多说,接下来,我将从对迷宫算法的分析,数据结构的选择,及程序的实现进行简略描述。


    1)迷宫算法的分析:

    在计算机中,为了着重数据操作,我忽略掉了类似立交桥般复杂的线路,以及小怪兽的设定等。

    如图左上角空白(#为边界,空白即指无字符的地方)为起点,右下角为终点。此迷宫中最需要我们想到的该是有岔道,还有圈。

    

    也就是说程序应当有排除岔道,还有排除圈的能力。对于排除岔道,只要判断当前位置对于行迷宫者来说是否为#即可,而对于圈,我们可以用一个mark数组来标记此位置是否走过,每当向下一个位置走时就同时判断是否为#和此位置是否走过即可(这两个判断在下文直接简称为“通路成立判断”)。

    以上仅解决了两个小问题,而更重要的是:行迷宫者到底如何走,是让它一直向上走,还是一直向右走,还是转着圈走。当我们在想它如何走时,方法就出现了。我们可以记录当前坐标值,然后对周围四个方向,即上,下,左,右依次进行“通路成立判断”,如果成立,按成立的那个方向移动一格,并再次让程序进行周围四个方向,即上,下,左,右依次进行“通路成立判断”。当四个方向的“通路成立判断”都不成立,那么就知道此路不通,接着让行迷宫者按原路返回,并继续进行没有判断完的方向ÿ

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
程序在VC++ 6下顺利编译通过。 一、 实验目的: (1) 熟练掌握链的基本操作及应用。 (2) 利用链表作为的存储结构,设计实现一个求解迷宫的非递归程序。 二、实验内容: 【问题描述】 以一个m×n的长方阵表示迷宫,0和1分别表示迷宫中的通路和障碍。设计一个程序,对信任意设定的迷宫,求出一条从入口到出口的通路,或得出没有通路的结论。 【基本要求】 首先实现一个链表作存储结构的类型,然后编写一个求解迷宫的非递归程序。求得的通路以三元组(i,j,d)的形式输出,其中:(i,j)指示迷宫中的一个坐标,d表示走到下一坐标的方向。如:对于下列数据的迷宫,输出的一条通路为:(1,1,1),(1,2,2),(2,2,2),(3,2,3),(3,1,2),……。 【测试数据】 迷宫的测试数据如下:左上角(1,1)为入口,右下角(8,9)为出口。 1 2 3 4 5 6 7 8 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 0 0 1 1 0 1 0 1 1 1 0 0 1 0 0 0 0 1 0 0 0 0 0 1 0 0 0 1 0 1 0 1 1 1 1 0 0 1 1 1 0 0 0 1 0 1 1 1 0 0 0 0 0 0 以方阵形式输出迷宫及其通路。 输出: 请输入迷宫的长和宽:5 5 请输入迷宫内容: 0 1 1 0 0 0 0 1 1 0 1 0 0 1 1 1 0 0 1 0 1 1 0 0 0 迷宫的路径为 括号内的内容分别表示为(行坐标,列坐标,数字化方向,方向) (1,1,1,↓) (2,1,2,→) (2,2,1,↓) (3,2,1,↓) (4,2,2,→) (4,3,1,↓) (5,3,2,→) (5,4,2,→) (5,5,0,) 迷宫路径探索成功!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值