迷宫问题求解

一、目的

1、进一步理解和掌握各种基本抽象数据类型的逻辑结构、存储结构和操作实现算法。

2、掌握分析问题,求解问题的方法并提高设计编程实现的能力。

3、熟练掌握C语言或者C++语言的各种操作,制定清晰的程序流程图和数据结构的详细定义。

二、实验具体内容

1、用回溯法求解迷宫问题,可以用一个栈保存探索的位置。并且在该迷宫的行走中,站在一点可以有四个方向选择,依次判断四个方向是否能走。

2、定义一个固定格式(10*10)迷宫如下:

```

{   0,1,1,1,0,0,0,0,0,0,

0,0,0,1,0,0,0,1,0,0, 

0,1,0,1,1,0,0,1,0,0, 

0,1,0,0,1,0,1,1,0,0, 

0,1,0,0,1,0,1,1,0,0, 

1,1,1,0,1,0,1,0,0,0, 

0,0,1,0,0,0,1,0,1,1, 

0,0,1,0,0,0,1,0,1,1, 

0,1,1,0,1,0,1,0,0,0, 

0,0,0,0,1,0,1,1,0,0,  };

```

3、并设置左上角(0,0)为入口,右下角(9,9)为出口,0表示通路,1表示有墙。

4、用二维数组MAZE[x][y] 来表示迷宫的状态,0表示通路,1表示有墙,2表示已经走过。

5、用STL的栈储存走过的路径,压栈表示进入下一步,退栈表示返回上一步。每个栈元素是当前位置坐标被结构体对象包装产生的。

三、分析

首先要考虑如何判断行进方向,并且确定下一个方向可以走,再考虑如何判定走过的路,这里我采用的是将其值设置为2,然后每走一步就将这个位置包装起来压栈,假如无法再继续行走的话就进行回溯,相当于原路返回,伴随的还有之前压入的错误路径的栈元素要出栈,反复进行从而将所有正确位置压入栈中,由栈底往栈顶遍历,从而输出正确路径。

四、代码

结构体定义:

```

struct pos{ 

    int i,j; 

}; 

```

方向判定:

判断是否有通路,有则返回通路位置,无则返回原来位置 

//向上  

    if(判定是否是通路且是否在迷宫范围之内且是否已经走过了){ 

          执行位置变动和将此位置标记为已走,返回下个位置 

    }//向右

else if(判定是否是通路且是否在迷宫范围之内且是否已经走过了){ 

                执行位置变动和将此位置标记为已走,返回下个位置

    }//向下

else if(判定是否是通路且是否在迷宫范围之内且是否已经走过了){ 

                执行位置变动和将此位置标记为已走,返回下个位置

    }//向左

else if(判定是否是通路且是否在迷宫范围之内且是否已经走过了){ 

                执行位置变动和将此位置标记为已走,返回下个位置 

    } 

    否则返回上一个位置。

数据结构操作:

stack Path; 

    声明两个结构体对象curr,nex; 

    将接收入栈元素的结构体对象curr初始化为入口元素,i=0,j=0;

    将入口元素入栈;

将入口(0,0)设置成走过的位置;

```

 while(判断栈是否为空){

        curr=栈顶; 

        nex=curr; 

       nex=Move(curr);//将curr传入Move函数判断方向并行走,从而发现通路返回下个位置或者没有发现通路返回上个位置 

       if(!(curr.i==nex.i&&curr.j==nex.j)) 

            发现通路,将nex压入栈顶;

        else 

            未发现通路,将栈顶出栈;

        if(判断nex是否到达出口(9,9)){ 

            struct posroute[Path.size()]; 

            intz=0; 

            while(判断栈时候为空,不空执行下列程序,空则跳出){ 

                curr=栈顶元素;

                将栈顶元素放入route结构体类型数组中;

                栈顶出栈,以便下次操作;

            } 

            for(intk=z-1;k>=0;k--){ 

                按规格输出路径;

            } 

            return; 

        } 

    } 

   cout<<"NO Path!"<

```

主函数:自行想象.......

五、运行结果

迷宫如下:

0 1 1 1 0 0 0 0 0 0

0 0 0 1 0 0 0 1 0 0

0 1 0 1 1 0 0 1 0 0

0 1 0 0 1 0 1 1 0 0

0 1 0 0 1 0 1 1 0 0

1 1 1 0 1 0 1 0 0 0

0 0 1 0 0 0 1 0 1 1

0 0 1 0 0 0 1 0 1 1

0 1 1 0 1 0 1 0 0 0

0 0 0 0 1 0 1 1 0 0


则路径为:

(0,0)->(1,0)->(1,1)->(1,2)->(2,2)

->(3,2)->(3,3)->(4,3)->(5,3)->(6,3)

->(6,4)->(6,5)->(5,5)->(4,5)->(3,5)

->(2,5)->(1,5)->(0,5)->(0,6)->(0,7)

->(0,8)->(0,9)->(1,9)->(2,9)->(3,9)

->(4,9)->(5,9)->(5,8)->(5,7)->(6,7)

->(7,7)->(8,7)->(8,8)->(8,9)->(9,9)

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,657评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,662评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,143评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,732评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,837评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,036评论 1 291
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,126评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,868评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,315评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,641评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,773评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,470评论 4 333
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,126评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,859评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,095评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,584评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,676评论 2 351

推荐阅读更多精彩内容