数据结构实验报告 迷宫.docx

上传人:b****6 文档编号:5862804 上传时间:2023-01-01 格式:DOCX 页数:7 大小:16.62KB
下载 相关 举报
数据结构实验报告 迷宫.docx_第1页
第1页 / 共7页
数据结构实验报告 迷宫.docx_第2页
第2页 / 共7页
数据结构实验报告 迷宫.docx_第3页
第3页 / 共7页
数据结构实验报告 迷宫.docx_第4页
第4页 / 共7页
数据结构实验报告 迷宫.docx_第5页
第5页 / 共7页
点击查看更多>>
下载资源
资源描述

数据结构实验报告 迷宫.docx

《数据结构实验报告 迷宫.docx》由会员分享,可在线阅读,更多相关《数据结构实验报告 迷宫.docx(7页珍藏版)》请在冰豆网上搜索。

数据结构实验报告 迷宫.docx

数据结构实验报告迷宫

数据结构实验报告

 

实验三迷宫

姓名:

xxx

学号:

xxx

专业:

信息安全

实验日期:

第十二.三周周日

实验三迷宫

一、实验目的

1、了解回溯法在求解迷宫问题中的应用

2、进一步掌握栈的使用

二、实验内容

用回溯法求解迷宫问题,可以用一个栈保存探索的序列。

并且在该迷宫的行走中,站在一点可以有八个方向选择。

比如如下的迷宫

Enter->0111000000

0001000100

0101100100

0100101100

0100101100

1110101000

0010001011

0010001011

0110101000

0000101100-->EXIT

下面是可能的路径(注意:

从入口到出口可能有多条路径,优先选择的方向不同,路径可能也不一样!

Path:

(maze[0][0],maze[1][0],maze[1][1],maze[1][2],maze[2][2],

maze[3][2],maze[3][3],maze[4][3],maze[5][3],maze[6][3],

maze[6][4],maze[6][5],maze[5][5],maze[4][5],maze[3][5],

maze[2][5],maze[2][6],maze[1][6],maze[0][6],maze[0][7],

maze[0][8],maze[1][8],maze[2][8],maze[3][8],maze[4][8],

maze[5][8],maze[5][7],maze[6][7],maze[7][7],maze[8][7],

maze[8][8],maze[8][9],maze[9][9])

Enter->X11100X---X---X0

X---X---X100X1X0

01X11X---X1X0

01X---X1X11X0

010X1X11X0

111X1X1X---X0

001X---X---X1X11

0010001X11

0110101X--X--X

000010110X-->EXIT

1、提示:

(1)数据结构:

✧用二维数组MAZE[m+2][n+2]表示迷宫的结构,数组中的值为1表示是墙,为0表示可以走通。

(用MAZE[m+2][n+2]而不用MAZE[m][n]的原因在于想表示和编写代码的时候简单些,而且让迷宫周围都是墙,防止错误的走出去)

✧用二维数组MARK[m+2][n+2]表示迷宫是否被走过,主要是为了回溯时已经证明走不通的路线就不要再去走了。

(用MARK[m+2][n+2]而不用MARK[m][n]的原因在于想表示和编写代码的时候简单些)

✧二维数据MOVE[8][2]是为了更方便的移动到下一步,改变坐标。

这个二维数组是为了更好的转换坐标(八个方向,从0到7),而且也能避免重复走路

✧用栈保存走过的路径

(2)输出:

✧迷宫布局,用0表示可以走通的地方,用1表示墙

✧如果能走通,则输出路径和路径的长度;若不能走通,则输出提示不能走通

✧带有路径的迷宫布局

头文件部分

 

#ifndefMIG_H

#defineMIG_H

structzhan

{intMAX;

intn;

int*s;

};

typedefstructzhan*seqstack;

seqstackvoidzhan(intm);

intisnullzhan(seqstackpastack);

voidyazhan(seqstackpastack,intk);

voidchuzhan(seqstackpastack);

voidnizhan(seqstackpastack);

inttopzhan(seqstackpastack);

voidprintzhan(seqstackpastack);

voidmigonglujin(intmaze[8][11],intdirection[4][2],intx1,inty1,intx2,inty2,intm);#endif

函数算法实现部分

#include"ma.h"

#include

#include

seqstackvoidzhan(intm)//创建一个空栈

{seqstackpastack=(seqstack)malloc(sizeof(structzhan));

if(pastack!

=NULL)

{pastack->s=(int*)malloc(sizeof(int)*m);

if(pastack->s)

{pastack->MAX=m;

pastack->n=-1;

returnpastack;}

elsefree(pastack);

}

printf("over");

returnNULL;

}

intisnullzhan(seqstackpastack)//判断栈是否为空

{return(pastack->n==0);}

voidyazhan(seqstackpastack,intk)//压栈

{if(pastack->n>=pastack->MAX-1)

{printf("不好意思,这站满人了,等下一站吧,亲!

");

}

else

{pastack->n++;

pastack->s[pastack->n]=k;}

}

voidchuzhan(seqstackpastack)//出栈

{if(pastack->n==0)

{printf("我都空了");}

else

{pastack->n=pastack->n-1;}

}

inttopzhan(seqstackpastack)//取栈顶元素

{if(pastack->n==-1)

{printf("木有东西哦!

无顶!

");}

else

{return(pastack->s[pastack->n]);

}

}

voidprintzhan(seqstackpastack)//打印栈

{intb;

b=pastack->n;

while(b>-1)

{printf("%d",pastack->s[b]);

printf("");b--;}}

voidnizhan(seqstackpastack)//将栈倒置,即:

逆栈

{inti;

for(i=0;i<=pastack->n;i++)

{printf("%d",pastack->s[i]);

printf("");}

}

voidmigonglujin(intmaze[8][11],intdirection[4][2],intx1,inty1,intx2,inty2,intm)

{inti,j,k;

intg,h,x,y,d;

seqstackc;

c=voidzhan(m);

maze[x1][y1]=2;

x=x1;

y=y1;

d=-1;

yazhan(c,x);

yazhan(c,y);

while(!

isnullzhan(c))

{y=topzhan(c);

chuzhan(c);

x=topzhan(c);

chuzhan(c);

i=x;

j=y;

k=d+1;

while(k<=3){g=i+direction[k][0];

h=j+direction[k][1];

if(g==x2&&h==y2&&maze[g][h]==0)

{printf("打印路径上的每一点(以<-为开始端哦!

且按这个方向走!

)");

//nizhan(c);

while(!

isnullzhan(c))

{

y=topzhan(c);

//printf("这是Y点");

//printf("%d",y);

chuzhan(c);

x=topzhan(c);

chuzhan(c);

//printf("这是X点");

//printf("%d",x);

//chuzhan(c);

//printf("");

printf("%d%d",x,y);printf("<-");

}

return;

}

 

if(maze[g][h]==0)

{maze[g][h]=2;

x=i;y=j;d=k;

yazhan(c,x);

yazhan(c,y);i=g;j=h;k=-1;

}

k=k+1;

}

}

printf("thepathhasnotbeenfound.\n");

}

主函数部分

#include"ma.h"

#include"stdlib.h"

#include"stdio.h"

voidmain()

intmaze[8][11]={{1,1,1,1,1,1,1,1,1,1,1},

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

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

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

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

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

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

{1,1,1,1,1,1,1,1,1,1,1}};

intdirection[4][2]={{0,1},{1,0},{0,-1},{-1,0}};

printf("求迷宫路径:

");

migonglujin(maze,direction,1,1,6,9,200);}

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 经管营销

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1