- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
迷宫的表示
. 迷宫的表示。迷宫用结构体MATRIX来表示包括迷宫矩阵迷宫的宽,迷宫的高,迷宫入口的坐标,迷宫出口的坐标。结构体定义如下:
typedef struct _step{int x; //行坐标int y; //列坐标}STEP;typedef struct _matrix{int data[MAX_WIDTH+2][MAX_WIDTH+2]; //迷宫数据,0:表示有路,1:表示墙int width; //矩阵(迷宫)的宽,包括最左和最有2堵墙int height; //矩阵(迷宫)的宽,包括顶部和底部2堵墙STEP entrance; //迷宫入口STEP exit; //迷宫出口}MATRIX;
迷宫矩阵的每一个元素可以是0或1,0表示可走,1表示是墙,走不通。为了便于检查是否越界,即坐标超过迷宫的范围。在迷宫的4个边增加了全1数据,表示4堵墙,这样,在任何时候,都不会越界。下面的数据表示1个5×5的迷宫,增加了4堵墙后,实际宽度和高度变为7,迷宫变成1个7×7的矩阵1, 1, 1, 1, 1, 1, 1,1, 0, 0, 0, 0, 0, 1,1, 1, 0, 1, 0, 1, 1,1, 0, 0, 1, 1, 1, 1,1, 0, 1, 0, 0, 0, 1,1, 0, 0, 0, 1, 0, 1,1, 1, 1, 1, 1, 1, 1,
2.算法
? 走迷宫的路径的每一步可用二元组(x,y)来表示。已经走过的路径放入数组path。
首先,将入口的坐标放入数组,此时path数组的元素个数为1.
接下来使用下面的规则,试图找到一条出路1. 从当前位置(即数组的最后一个元素),从右,下,左,上四个方向搜索,看能否走通。? 如果可找到一条通路,则? ? ? 将新的位置的坐标放入path数组,数组长度加1.? ? ? ? 如果新的位置的坐标等于出口的坐标,搜索结束。?? ? 如果从各个方向都走不通,则? ? ?将迷宫当前位置的元素置为1,这样,当前点就变成墙,下次就不会走到这个位置了。并将数组的最有一个元素丢弃,数组长度减1? ? ?如果数组的长度为0,没有任何路径可以走通,搜索结束。
全部的代码见下:
[cpp] view plaincopyprint?
#include?stdafx.h??
#include?stdlib.h??
#include?stdio.h??
#include?memory.h??
??
#define?MAX_WIDTH????30??
#define?MAX_HEIGHT???30??
??
typedef?struct?_step??
{??
????int?x;??????????//行坐标??
????int?y;??????????//列坐标??
}STEP;??
??
typedef?struct?_matrix??
{??
????int?data[MAX_WIDTH+2][MAX_WIDTH+2];?//迷宫数据,0:表示有路,1:表示墙??
????int?width;??????????????//矩阵(迷宫)的宽,包括最左和最有2堵墙??
????int?height;?????????????//矩阵(迷宫)的宽,包括顶部和底部2堵墙??
????STEP?entrance;??????????????//迷宫入口??
????STEP?exit;??????????????//迷宫出口??
}MATRIX;??
??
MATRIX?g_matrix=????????????????//初始化为一个迷宫,程序也能从文件中读入迷宫数据??
{??
????{??
????????{1,?1,?1,?1,?1,?1,?1},??
????????{1,?0,?0,?0,?0,?0,?1},??
????????{1,?1,?0,?1,?0,?1,?1},??
????????{1,?0,?0,?1,?1,?1,?1},??
????????{1,?0,?1,?0,?0,?0,?1},??
????????{1,?0,?0,?0,?1,?0,?1},??
????????{1,?1,?1,?1,?1,?1,?1},??
????},??
????7,7,????????????????????//7行,7列,包括4堵墙??
????{1,1},??????????????????//入口坐标??
????{5,5}???????????????????//出口坐标??
};??
??
??
static?STEP??s_shift[]=??
{??
????{1,0},??????//向右走,?x++
文档评论(0)