数据结构迷宫Word格式.docx

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

数据结构迷宫Word格式.docx

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

数据结构迷宫Word格式.docx

}Stack;

intw=0,Flag=0,n;

SElemType*InitList();

intMazePath1(Listmaze1,Stack&

maze2);

intMazePath2(Listmaze1,Stack&

intInitList(List&

maze1);

voidInitStack(Stack&

intsearch(intmark,intn);

voidOutput1(Listmaze1);

voidOutput2(Listmaze1,Stackmaze2);

voidmain()

inti,a=1,b,c;

Listmaze1;

Stackmaze2;

InitStack(maze2);

while(a)

{

for(i=0;

i<

4;

i++)

{

InitList(maze1);

if(i!

=0)

printf("

\n\n\n\n"

);

Output1(maze1);

if(w==0)

{

\n\n\n\n\n\n\n\n\t\t1——计算机走迷宫\t\t2——人走迷宫"

\n"

scanf("

%d"

&

b);

}

getchar();

if(b==1)

system("

cls"

c=MazePath1(maze1,maze2);

if(c==0)

break;

Output2(maze1,maze2);

maze2.top=maze2.base;

}

elseif(b==2)

c=MazePath2(maze1,maze2);

else

你的输入有误,请重新输入:

"

}

system("

printf("

\n\n\n\n\n\n\n你是否想进入下一个迷宫\n\n\n\n\t\t\t\t1——是\t\t0——否\n"

scanf("

a);

Flag=0;

}

}

maze1)

inta,b=0,i,j;

staticintk=0,t=0;

srand((unsigned)time(NULL));

//用于改变随机数

if(Flag==1)//用于判断路径

n;

for(j=0;

j<

j++)

maze1.elem[i*n+j].seat=0;

maze1.elem[i*n+j].pass=0;

returnOK;

if(k==0)//初始化线性表

maze1.elem=(SElemType*)malloc((N*N)*sizeof(SElemType));

if(!

maze1.elem)

exit(OVERFLOW);

if(w==4)

w=0;

t=0;

k=0;

if(t==0)

while

(1)//选择迷宫的大小

{

printf("

请选择迷宫的大小(4~24):

scanf("

n);

if(n>

3&

&

n<

25)

break;

你选择的迷宫大小有误,请重新输入\n\n"

n*n;

i++)//随机产生迷宫

a=rand()%2;

maze1.elem[i].ord=a;

}

\n\n\n"

)//用于避免产生太多死迷宫

do

b=rand()%4;

}while(!

maze1.elem[i].ord=1;

i=i+b;

i++)//设定迷宫的外围

maze1.elem[n*n-n+i].ord=maze1.elem[i].ord=0;

maze1.elem[i*n].ord=maze1.elem[i*n+n-1].ord=0;

t++;

for(i=0;

i++)//每走一步后进行初始化

for(j=0;

maze1.elem[i*n+j].seat=0;

//只将线性表的判断方向的变量进行初始化

if(k==0)

{

maze1.elem[n+1].ord=2;

maze1.elem[n*n-n-2].ord=3;

if(maze1.elem[n+2].ord==0&

maze1.elem[2*n+1].ord==0)

maze1.elem[2*n+1].ord=1;

k++;

returnOK;

maze2)

inta=0;

Elemente;

maze2.num=0;

e.loc=n+1;

//设定入口

e.seat=20;

e.di=1;

maze1.elem[n+1].pass=1;

*maze2.top++=e;

while(a!

=(n*n-n-2))//判断是否到终点

while

(1)

while

(1)

a=search(e.loc,e.di);

//根据地址和方向确定下一个位置的地址

if(maze1.elem[a].pass==1||maze1.elem[a].ord==0)//判断是否走过和能否可通,否则换一个方向

e.di++;

else

if(e.di>

4)//如果此处的四个方向都不可通,则结束

if(e.di>

4)//若某处的四个方向都不可通吗,则将此元素出栈

maze2.top--;

if(maze2.top==maze2.base)//判断迷宫是否可通

{

Output2(maze1,maze2);

printf("

\n\n\n\t\t\t此迷宫不能通行,欢迎进入下一个迷宫\n\n\n"

\n\n\n\t\t\t\t按Enter→\n\n\n\n\n\n\n"

getchar();

w=4;

returnERROR;

}

e=*(maze2.top-1);

e.di++;

maze2.num++;

//记录所走步数

getchar();

else

e.loc=a;

//将元素入栈

e.seat=e.di+w;

if(e.di==3)//判断此元素的下一个方向

e.di=2;

else

e.di=1;

maze1.elem[a].pass=1;

*maze2.top++=e;

maze2.num++;

Output2(maze1,maze2);

//将迷宫模型输出

getchar();

w++;

Flag=1;

//用于标识一次路径结束

charr;

system("

printf("

请选择方向:

\n\nW——↑\t\tS——↓\t\tA——←\t\tD——→\t\tN——迷宫不可通"

\n\n"

Output1(maze1);

\n\n\n\n\n\n\t\t\t\t按Enter→\n\n\n\n\n\n\n"

getchar();

=(n*n-n-2))

flushall();

r=getche();

if(r=='

W'

||r=='

w'

e.di=4;

elseif(r=='

S'

s'

e.di=2;

A'

a'

e.di=3;

D'

d'

e.di=1;

N'

n'

w=4;

returnERROR;

\n\n\n\n\n\n你输入的方向错误,请重新输入:

continue;

}

a=search(e.loc,e.di);

if(maze1.elem[a].ord==0)

\n\n\n\n\n\n此方向不可通,请重新输入:

if(abs(e.di-e.seat)==2&

e.seat<

5)

maze2.top--;

e=*(maze2.top-1);

maze2.num++;

system("

Output2(maze1,maze2);

(maze2.top-1)->

di=e.di;

e.loc=a;

e.seat=e.di;

*maze2.top++=e;

w=4;

maze2)//对栈进行初始化

maze2.base=(Element*)malloc((N*N)*sizeof(Element));

if(!

maze2.base)

exit(OVERFLOW);

maze2.top=maze2.base;

intsearch(intmark,intm)//通过地址和方向取得相应的地址值

inta,i=w+1;

switch(i)

case1:

break;

case2:

m=m+1;

case3:

m=m+2;

case4:

m=m+3;

if(m%4==1)

a=mark+1;

elseif(m%4==2)

a=mark+n;

elseif(m%4==3)

a=mark-1;

else

a=mark-n;

returna;

voidOutput1(Listmaze1)//输出迷宫的初始模型

inti;

if(i%n==0)

if(n<

14)

\n\t\t\t\t"

\n\t\t\t"

if(maze1.elem[i].ord==0)

█"

elseif(maze1.elem[i].ord==1)

"

elseif(maze1.elem[i].ord==2)

⊙"

㊣"

voidOutput2(Listmaze1,Stackmaze2)//输出迷宫的路径

inti,j;

staticintk=1;

if(w==0)

k=1;

j=maze2.top-maze2.base-1;

while(maze2.base!

=maze2.top)//将栈的元素赋值给线性表

e=*--maze2.top;

maze1.elem[e.loc].seat=e.seat;

maze1.elem[n+1].seat=20;

maze1.elem[n*n-n-2].seat=30;

//对入口和出口进行处理

\n\n\n\n\n\n\n\n"

{if(maze1.elem[i].seat==20)

elseif(maze1.elem[i].seat==30)

if(maze1.elem[i].seat%4==1)

→"

elseif(maze1.elem[i].seat%4==2)

↓"

elseif(maze1.elem[i].seat%4==3)

←"

elseif(maze1.elem[i].seat==4)

↑"

if(Flag==1)//输出迷宫的总步骤和所需步骤

\n\n\t\t\t路径%d共走%d步,所需步骤为%d步"

k,maze2.num,j);

if(w==4)

\n\n\n\t\t\t此迷宫已结束,欢迎进入下一个迷宫\n\n\n"

\n\n\n\n\t\t\t\t按Enter→\n\n\n\n\n\n\n"

k++;

InitList(maze1);

//输出后再对线性表进行初始化

程序运行结果:

计算机走迷宫:

注:

每个迷宫都走四次,分别向东、南、西、北四个方向走迷宫,并计算出走到终点所走的步骤;

每走一步按Enter键。

人走迷宫:

注:

分别按W,A,S,D来控制方向,如果迷宫不可通,则按N键,进入下一个迷宫

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

当前位置:首页 > 外语学习 > 英语学习

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

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