数据结构迷宫最短路径实验报告
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验报告
课程名:数据结构(C语言版)实验名:迷宫问题II
姓名:
班级:
学号:
撰写时间:2014/10/10
一实验目的与要求
1. 了解栈的应用
2. 利用栈在迷宫中找到一条路
二实验内容
•一个迷宫如图1所示, 是由若干个方格构成的一个矩形, 其中有唯一的
一个入口(用⃝标示), 有唯一的一个出口(用△标示). 图中深色的方格无
法到达, 浅色的方格都是可以到达的. 每一次只能从当前方格前进到与当前方
格有公共边的方格中(因此前进方向最多有四个).
•本次实验的迷宫问题要求找到从入口到出口的最短的路.
图1:迷宫
三实验结果与分析
程序:
#include <stdio.h>
#include <stdlib.h>
int Maze(int ox,int oy,int ex,int ey,int rnum,int cnum,int a[rnum][cnum]){
int b[rnum][cnum];
int i,j,Znum=0;
for(i=0;i<rnum;++i){
for(j=0;j<cnum;++j){
b[i][j]=a[i][j];
if(a[i][j]==0){
Znum=Znum+1;
}
}
}
int Qx[Znum+1], Qy[Znum+1], P[Znum+1], head=0, tail=0; for(i=0;i<Znum+1;++i){
Qx[i]=-10;
Qy[i]=-10;
P[i]=-10;
}
/*int dx[4] = {0,1,0,-1};
int dy[4] = {-1,0,1,0};
int neighbor_num = 4;*/
int dx[8] = {-1, 0, 1,1,1,0,-1,-1};
int dy[8] = {-1,-1,-1,0,1,1, 1, 0};
int neighbor_num = 8;
if(ox==ex && oy==ey){
printf("(%d,%d)",ox,oy);
}
else{
Qx[tail]=ox;
Qy[tail]=oy;
P[tail]=-1;
++tail;
b[ox][oy]=2;
}
int brand = -1;
while(tail>head){
for(i=0;i<neighbor_num;i++){
int tx = Qx[head]+dx[i];
int ty = Qy[head]+dy[i];
if(b[tx][ty]==0){
if(tx==ex && ty==ey){
printf("(%d,%d), ",tx,ty);
int t = head;
while(t>=0){
printf("(%d,%d), ",Qx[t],Qy[t]);
t=P[t];
}
head=tail;
brand=1;
break;
}
else{
Qx[tail]=tx;
Qy[tail]=ty;
P[tail]=head;
++tail;
b[tx][ty]=2;
}
}
}
++head;
}
return(brand);
}
int main(int argc, char *argv[]) {
int rnum = 10;
int cnum = 10;
int a[10][10]={{1,1,1,1,1,1,1,1,1,1},
{1,0,0,1,0,0,0,1,0,1},
{1,0,0,1,0,0,0,1,0,1},
{1,0,0,0,0,1,1,0,0,1},
{1,0,1,1,1,0,0,0,0,1},
{1,0,0,0,1,0,0,0,0,1},
{1,0,1,0,0,0,1,0,0,1},
{1,0,1,1,1,0,1,1,0,1},
{1,1,0,0,0,0,0,0,0,1},
{1,1,1,1,1,1,1,1,1,1}};
//假设外面有一层不可到达的方块,故迷宫成了10乘10型int ox=1,oy=1,ex=rnum-2,ey=cnum-2;
int brand = Maze(ox,oy,ex,ey,rnum,cnum,a);
if(brand<0){
printf("There is no way\n");
}
return 0;
}
图1:实验结果截图。