(完整word版)数据结构C语言迷宫求解问题(有要求和源代码).doc 立即下载
2024-09-09
约2.7千字
约7页
0
47KB
举报 版权申诉
预览加载中,请您耐心等待几秒...

(完整word版)数据结构C语言迷宫求解问题(有要求和源代码).doc

(完整word版)数据结构C语言迷宫求解问题(有要求和源代码).doc

预览

免费试读已结束,剩余 2 页请下载文档后查看

5 金币

下载文档

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

(完整word版)数据结构C语言迷宫求解问题(有要求和源代码)
(完整word版)数据结构C语言迷宫求解问题(有要求和源代码)
(完整word版)数据结构C语言迷宫求解问题(有要求和源代码)
迷宫求解
设计一个迷宫求解程序,要求如下:
以M×N表示长方阵表示迷宫,求出一条从入口到出口的通路,或得出没有通路的结论。
能任意设定的迷宫
(选作)如果有通路,列出所有通路
提示:
以一个二维数组来表示迷宫,0和1分别表示迷宫中的通路和障碍,如下图迷宫数据为:




































































































1111111111
1001000101
1001000101
1000011001
1011100001
1000100001
1010001001
1011101101
1100000001
1111111111
入口位置:11
出口位置:88
探索过程可采用如下算法,设定当前位置的初值为入口位置;
do{
	若当前位置可通,
	则{
将当前位置插入栈顶;
		若该位置是出口位置,则结束;
		否则切换当前位置的东邻方块为新的当前位置;
}
否则,
{
	若栈不空且栈顶位置尚有其他方向未经探索,
		则设定新的当前位置为沿顺时针方向旋转找到的栈顶位置的下一相邻块;
	若栈不空但栈顶位置的四周均不可通,
		则{删去栈顶位置;//从路径中删去该通道块
若栈不空,则重新测试新的栈顶位置,
				直至找到一个可通的相邻块出栈至栈空;
			}
}
}while(栈不空);

#include<stdio.h>
#include<string.h>
#defineMaxSize32
inta[30][30];
intb[30][30];
intm,n;
typedefstruct
{
	inti;
	intj;
	intdi;
}Box;
typedefstruct
{
	Boxdata[MaxSize];
	inttop;
}StackType;

boolsereach(intX,intY,intX1,intY1);

voidmain()
{
	intX,Y,Y1,X1;
	memset(a,0,sizeof(a));
memset(b,0,sizeof(b));
//	for()
	printf("请输入迷宫的长度和宽度\n");
	while(~scanf("%d%d",&m,&n)){
	printf("请输入迷宫(0表示空地,1表示围墙)\n");
	for(inti=0;i<n;i++){
		for(intj=0;j<m;j++){
		scanf("%d",&a[i][j]);
		if(a[i][j]==1)
			b[i][j]=-1;
		}
	}
printf("请输入迷宫起点的行号和列号\n");
scanf("%d%d",&X,&Y);
	printf("请输入迷宫终点的行号和列号\n");
	scanf("%d%d",&X1,&Y1);
if(!sereach(X,Y,X1,Y1))
		printf("该迷宫没有解!\n");
	printf("请输入迷宫的长度和宽度\n");
	}
//	return0;
}

boolsereach(intX,intY,intX1,intY1)
{
StackTypest;
	inti,j,di,find;
	st.top=-1;
	while(a[X][Y]!=0)
	{
		printf("迷宫起点的行号和列号有错,请重新输入\n");
		scanf("%d%d",&X,&Y);
	}
	if(a[X][Y]==0)
		b[X][Y]=-1;
	
	while(a[X1][Y1]!=0)
	{
		printf("迷宫终点的行号和列号有错,请重新输入\n");
		scanf("%d%d",&X1,&Y1);
	}
st.top++;
	st.data[st.top].i=X;
	st.data[st.top].j=Y;
	st.data[st.top].di=-1;
	do{
		find=0;
		i=st.data[st.top].i;
		j=st.data[st.top].j;
		di=st.data[st.top].di;
while(di<4&&find==0)
		{
			di++;
			switch(di)
			{
			case0:i=st.data[st.top].i-1;j=st.data[st.top].j;break;
			case1:i=st.data[st.to
查看更多
单篇购买
VIP会员(1亿+VIP文档免费下)

扫码即表示接受《下载须知》

(完整word版)数据结构C语言迷宫求解问题(有要求和源代码)

文档大小:47KB

限时特价:扫码查看

• 请登录后再进行扫码购买
• 使用微信/支付宝扫码注册及付费下载,详阅 用户协议 隐私政策
• 如已在其他页面进行付款,请刷新当前页面重试
• 付费购买成功后,此文档可永久免费下载
全场最划算
12个月
199.0
¥360.0
限时特惠
3个月
69.9
¥90.0
新人专享
1个月
19.9
¥30.0
24个月
398.0
¥720.0
6个月会员
139.9
¥180.0

6亿VIP文档任选,共次下载特权。

已优惠

微信/支付宝扫码完成支付,可开具发票

VIP尽享专属权益

VIP文档免费下载

赠送VIP文档免费下载次数

阅读免打扰

去除文档详情页间广告

专属身份标识

尊贵的VIP专属身份标识

高级客服

一对一高级客服服务

多端互通

电脑端/手机端权益通用