教学文库网 - 权威文档分享云平台
您的当前位置:首页 > 精品文档 > 互联网资料 >

数据结构课程设计 - 迷宫(4)

来源:网络收集 时间:2026-08-26
导读: if(c=='q'map[x-][y-1]!=1) DrawPeople(y,8);//左上 } setfillstyle(SOLID_FILL,WHITE);//消去红色探索物,恢复原迷宫图 bar(100+y*15-6,50+x*15-6,100+y*15+6,50+x*15+6); if(x==N-2y==N-2)//人工控制找成功的话 y

if(c=='q'&&map[x-][y-1]!=1) DrawPeople(&x,&y,8);//左上 }

setfillstyle(SOLID_FILL,WHITE);//消去红色探索物,恢复原迷宫图 bar(100+y*15-6,50+x*15-6,100+y*15+6,50+x*15+6); if(x==N-2&&y==N-2)//人工控制找成功的话 yes=1;//如果成功标志为1 }

//拷贝迷宫数组

void WayCopy(int(*oldmap)[N],int(*map)[N]) {

int i,j;

for(i=0;i

oldmap([i][j]=map[i][j]; }

//递归找路

int FindWay(int (*map)[N],int i,int j) {

if(i==N-2&&j==N-2)//走到路口 {

yes=1;//标志为1,表示成功 return; }

map[i][j]=1;//走过的地方变为1 WayCopy(oldmap,map);//拷贝迷宫图

if(oldmap[i+1][j+1]==0&&!yes)//判断右下方是否可走 {

FindWay(oldmap,i+1,j+1);

if(yes)//如果到达出口了,再把值赋给显示路线的way数组,也正是这个原因,所以具体路线是从最后开始保存 {

way[wayn][0]=i; way[wayn++][1]=j return; } }

WayCopy(oldmap,map);

if(oldmap[i+1][j]==0&&!yes)//判断下方是否可以走,如果标志yes已经是1,则不用找下去了

- 15 -

{

FindWay(oldmap,i+1,j); if(yes) {

way[wayn][0]=i; way[wayn++][1]=j; return; } }

WayCopy(oldmap,map);

if(oldmap[i][j+1]==0&&!yes)//判断右方是否可以走 {

FindWay(oldmap,i,j+1); if(yes) {

way[wayn][0]=i; way[wayn++][1]=j; return; } }

WayCopy(oldmap,map);

if(oldmap[i-1][j]==0&&!yes)//判断上方是否可以走 {

FindWay(oldmap,i-1,j); if(yes) {

way[wayn][0]=i; way[wayn++][1]=j; return; } }

WayCopy(oldmap,map);

if(oldmap[i-1][j+1]==0&&!yes)//判断右上方是否可以走 {

FindWay(oldmap,i-1,j+1); if(yes) {

way[wayn][0]=i; way[wayn++][1]=j; return; } }

WayCopy(oldmap,map);

if(oldmap[i+1][j-1]==0&&!yes)//判断左下方是否可走

- 16 -

{

FindWay(oldmap,i+1,j-1); if(yes) {

way[wayn][0]=i; way[wayn++][1]=j; return; } }

WayCopy(oldmap,map);

if(oldmap[i][j-1]==0&&!yes)//判断左方是否可走 {

FindWay(oldmap,i,j-1); if(yes) {

way[wayn][0]=i; way[wayn++][1]=j; return; } }

WayCopy(oldmap,map);

if(oldmap[i-1][j-1]==0&&!yes)//判断左上方是否可走 {

FindWay(oldmap,i-1,j-1); if(yes) {

way[wayn][0]=i; way[wayn++][1]=j; return; } }

return; }

//开始的随机迷宫图

void MapRand(int (*map)[N]) {

int i,j;

cleardevice();//清除图形屏幕 randomize();//随机数发生器 for(i=0;i

for(j=0;j

- 17 -

{

if(i==0||i==N-1||j==0||j==N-1)//最外面一圈为墙壁 map[1][j]=1; else

if(i==1&&j==1||i==N-2||&&j==N-2)//出发点与终点表示为可走的 map[i][j]=0; else

map[i][j]=random(2);//其他的随机生成0或1 } } }

//输出迷宫图

void PrMap(int (*map)[N]) {

int i,j;

for(i=0;i

setfillstyle(SOLID_FILL,WHITE);//白色为可走的路 bar(100+j*15-6,50+i*15-6,100+j*15+6,50+i*15+6); } else {

setfillstyle(SOLID_FILL,BLUE);//蓝色为墙壁

bar(100+j*15-6,50+i*15-6,100+j*15+6,50+i*15+6); } }

//找到通路

void Find(void) {

int i;

setfillstyle(SOLID_FILL,RED);//红色输出走的具体路线 wayn--;

for(i=wayn;i>=0;i--) {

bar(100+way[i][1]*15-6,50+way[i][0]*15-6,100+way[i][1]*15+6,50+way[i][0]*15+6);

sleep(1);//控制时间显示

- 18 -

}

bar(100+(N-2)*15-6,50+(N-2)*15-6,100+(N-2)*15+6,50+(N-2)*15+6);//在目标点标红色

setcolor(GREEN);

settextstyle(0,0,2);//设置字体大小 outtextxy(130,400,\}

//没找到通路

void NotFind(void) {

setcolor(GREEN);

settextstyle(0,0,2);//设置字体大小 outtextxy(130,400,\}

//结果处理

void Result(void) {

if(yes)//如果找到 Find(); else//没找到路 NotFind(); getch(); }

//图形关闭

void Close(void) {

closegraph(); }

- 19 -

…… 此处隐藏:840字,全部文档内容请下载后查看。喜欢就下载吧 ……
数据结构课程设计 - 迷宫(4).doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印
本文链接:https://www.jiaowen.net/wendang/444111.html(转载请注明文章来源)
Copyright © 2020-2025 教文网 版权所有
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ:78024566 邮箱:78024566@qq.com
苏ICP备19068818号-2
Top
× 游客快捷下载通道(下载后可以自由复制和排版)
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
注:下载文档有可能出现无法下载或内容有问题,请联系客服协助您处理。
× 常见问题(客服时间:周一到周五 9:30-18:00)