数据结构迷宫代码(数据结构迷宫问题流程图)
admin 发布:2022-12-19 22:28 157
本篇文章给大家谈谈数据结构迷宫代码,以及数据结构迷宫问题流程图对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。
本文目录一览:
数据结构算法(c语言) 迷宫求解
注释非常详细,希望对你有所帮助。
#includestdio.h
#includestdlib.h
#define M 15
#define N 15
struct mark //定义迷宫内点的坐标类型
{
int x;
int y;
};
struct Element //"恋"栈元素,嘿嘿。。
{
int x,y; //x行,y列
int d; //d下一步的方向
};
typedef struct LStack //链栈
{
Element elem;
struct LStack *next;
}*PLStack;
/*************栈函数****************/
int InitStack(PLStack S)//构造空栈
{
S=NULL;
return 1;
}
int StackEmpty(PLStack S)//判断栈是否为空
{
if(S==NULL)
return 1;
else
return 0;
}
int Push(PLStack S, Element e)//压入新数据元素
{
PLStack p;
p=(PLStack)malloc(sizeof(LStack));
p-elem=e;
p-next=S;
S=p;
return 1;
}
int Pop(PLStack S,Element e) //栈顶元素出栈
{
PLStack p;
if(!StackEmpty(S))
{
e=S-elem;
p=S;
S=S-next;
free(p);
return 1;
}
else
return 0;
}
/***************求迷宫路径函数***********************/
void MazePath(struct mark start,struct mark end,int maze[M][N],int diradd[4][2])
{
int i,j,d;int a,b;
Element elem,e;
PLStack S1, S2;
InitStack(S1);
InitStack(S2);
maze[start.x][start.y]=2; //入口点作上标记
elem.x=start.x;
elem.y=start.y;
elem.d=-1; //开始为-1
Push(S1,elem);
while(!StackEmpty(S1)) //栈不为空 有路径可走
{
Pop(S1,elem);
i=elem.x;
j=elem.y;
d=elem.d+1; //下一个方向
while(d4) //试探东南西北各个方向
{
a=i+diradd[d][0];
b=j+diradd[d][1];
if(a==end.x b==end.y maze[a][b]==0) //如果到了出口
{
elem.x=i;
elem.y=j;
elem.d=d;
Push(S1,elem);
elem.x=a;
elem.y=b;
elem.d=886; //方向输出为-1 判断是否到了出口
Push(S1,elem);
printf("\n0=东 1=南 2=西 3=北 886为则走出迷宫\n\n通路为:(行坐标,列坐标,方向)\n");
while(S1) //逆置序列 并输出迷宫路径序列
{
Pop(S1,e);
Push(S2,e);
}
while(S2)
{
Pop(S2,e);
printf("--(%d,%d,%d)",e.x,e.y,e.d);
}
return; //跳出两层循环,本来用break,但发现出错,exit又会结束程序,选用return还是不错滴
}
if(maze[a][b]==0) //找到可以前进的非出口的点
{
maze[a][b]=2; //标记走过此点
elem.x=i;
elem.y=j;
elem.d=d;
Push(S1,elem); //当前位置入栈
i=a; //下一点转化为当前点
j=b;
d=-1;
}
d++;
}
}
printf("没有找到可以走出此迷宫的路径\n");
}
/*************建立迷宫*******************/
void initmaze(int maze[M][N])
{
int i,j;
int m,n; //迷宫行,列 [/M]
printf("请输入迷宫的行数 m=");
scanf("%d",m);
printf("请输入迷宫的列数 n=");
scanf("%d",n);
printf("\n请输入迷宫的各行各列:\n用空格隔开,0代表路,1代表墙\n",m,n);
for(i=1;i=m;i++)
for(j=1;j=n;j++)
scanf("%d",maze[i][j]);
printf("你建立的迷宫为(最外圈为墙)...\n");
for(i=0;i=m+1;i++) //加一圈围墙
{
maze[i][0]=1;
maze[i][n+1]=1;
}
for(j=0;j=n+1;j++)
{
maze[0][j]=1;
maze[m+1][j]=1;
}
for(i=0;i=m+1;i++) //输出迷宫
{
for(j=0;j=n+1;j++)
printf("%d ",maze[i][j]);
printf("\n");
}
}
void main()
{
int sto[M][N];
struct mark start,end; //start,end入口和出口的坐标
int add[4][2]={{0,1},{1,0},{0,-1},{-1,0}};//行增量和列增量 方向依次为东西南北 [/M]
initmaze(sto);//建立迷宫
printf("输入入口的横坐标,纵坐标[逗号隔开]\n");
scanf("%d,%d",start.x,start.y);
printf("输入出口的横坐标,纵坐标[逗号隔开]\n");
scanf("%d,%d",end.x,end.y);
MazePath(start,end,sto,add); //find path
system("PAUSE");
}
测试数据,算法复杂度你就自己来写吧,如果你连这都不自己做,那你一定是在应付作业。劝你还是自己运行测试一下吧,免得答辩时老师问你,什么都不知道,那你就悲剧了。祝你好运!!
数据结构迷宫问题(c语言)
#includestdio.h
#includestring.h
#includestdlib.h
#includetime.h
int m,n,num,map[101][101],f[101][101],a[101],b[101],d[2][4]={0,-1,0,1,-1,0,1,0},ans,flag;
void maze()
{
int i,j;
time_t t;
srand(time(t));
for(i=0;im;i++)
for(j=0;jn;j++)
{
map[i][j]=rand()%2;
if(map[i][j])
num++;
}
if(numm*n/2)
{
for(i=0;im;i++)
for(j=0;jn;j++)
if(!map[i][j])
map[i][j]+=rand()%2;
}
map[0][0]=1;
map[m-1][n-1]=1;
}
void print()
{
int i,j;
for(i=0;im;i++)
for(j=0;jn;j++)
{
printf("%d ",map[i][j]);
if(j==n-1)puts("");
}
}
void dfs(int x,int y)
{
int i,tx,ty;
if(!flag)
return;
for(i=0;i4;i++)
{
tx=x+d[0][i];
ty=y+d[1][i];
if(!f[tx][ty]tx=0ty=0txmtynmap[tx][ty])
{
f[tx][ty]=1;
a[ans]=tx;
b[ans++]=ty;
if(tx+ty==0)
{
printf("(%d,%d)\n",m,n);
for(flag=i=0;ians;i++)
printf("(%d,%d)\n",a[i]+1,b[i]+1);
return;
}
dfs(tx,ty);
f[tx][ty]=0;
ans--;
}
}
}
int main()
{
while(scanf("%d%d",m,n),m+n)
{
memset(f,0,sizeof(f));
num=ans=0;
flag=1;
maze();
print();
dfs(m-1,n-1);
if(flag)
puts("There is no path");
}
return 0;
}
如何用数据结构创建一个20×20的迷宫,用空格和星花表示路和墙,求代码,十分感谢
如图是我修改他人代码得到的。因为C画面的墙和路都要占同样1格。
如果画偶数宽高则会有路径浪费,所以还是画奇数宽高的好。
部分代码如下:(完整代码请追问)
int main()
{
int i,j;
system("color 2b");
srand((unsigned)time(NULL)); /*初始化随即种子*/
hidden(); /*隐藏光标*/
for(i=0;i=Height+1;i++)
for(j=0;j=Width+1;j++)
if(i==0||i==Height+1||j==0||j==Width+1) /*初始化迷宫*/
map[i][j]=Road;
else map[i][j]=Wall;
create(2*(rand()%(Height/2)+1),2*(rand()%(Width/2)+1)); /*从随机一个点开始生成迷宫*/
for(i=0;i=Height+1;i++) /*边界处理*/
{
map[i][0]=Wall;
map[i][Width+1]=Wall;
}
for(j=0;j=Width+1;j++) /*边界处理*/
{
map[0][j]=Wall;
map[Height+1][j]=Wall;
}
//★百度知道“q839219286”修订,多画一格避免宽高为偶数时没有墙
{ int pH_even= (Height/2)*2, pW_even=(Width/2)*2; //宽高偶数化
map[2][1]=Start; /*给定入口*/
map[pH_even][Width]=End; /*给定出口*/
for(i=1;i=pH_even+1;i++) /*画出迷宫*/
for(j=1;j=pW_even+1;j++)
paint(i,j);
}
game(); /*开始游戏*/
return 0;
}
迷宫C语言源程序代码
#includestdio.h
#includemalloc.h
int N;
int **maze;
int zx,zy;
void PrintMaze(int N){
int *l[2],i,j;
l[0]=(int*)malloc(sizeof(l)*N*N);
l[1]=(int*)malloc(sizeof(l)*N*N);
for(i=0;iN*N;i++){
l[0][i]=-1;
}
for(i=0;iN;i++){
for(j=0;jN;j++){
if(maze[i][j]1){
l[0][maze[i][j]-2]=i;
l[1][maze[i][j]-2]=j;
}
}
}for(i=0;iN*N;i++){
if(l[0][i]!=-1)printf("(%d,%d)\n",l[0][i]+1,l[1][i]+1);
else break;
}
}int SelMaze(int x,int y){
if(x9||y9||x0||y0)return(0);
return(!maze[x][y]);
}int FindMaze(int x,int y,int m){
if(x==zxy==zy){
maze[x][y]=m;
return(1);
}
if(SelMaze(x+1,y)){
maze[x][y]=m;
if(FindMaze(x+1,y,m+1))PrintMaze(N);
maze[x][y]=0;
}if(SelMaze(x,y+1)){
maze[x][y]=m;
if(FindMaze(x,y+1,m+1))PrintMaze(N);
maze[x][y]=0;
}if(SelMaze(x,y-1)){
maze[x][y]=m;
if(FindMaze(x,y-1,m+1))PrintMaze(N);
maze[x][y]=0;
}if(SelMaze(x-1,y)){
maze[x][y]=m;
if(FindMaze(x-1,y,m+1))PrintMaze(N);
maze[x][y]=0;
}
return(0);
}
int main(){
int x,y,i,j;
scanf("%d\n%d%d%d%d",N,x,y,zx,zy);
zx--;zy--;x--;y--;
maze=(int**)malloc(sizeof(int*)*N);
for(i=0;iN;i++){
maze[i]=(int*)malloc(sizeof(maze)*N);
for(j=0;jN;j++){
scanf("%d",maze[i][j]);
}
}
if(!FindMaze(x,y,2))printf("No");
return(0);
}
关于数据结构迷宫代码和数据结构迷宫问题流程图的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。
版权说明:如非注明,本站文章均为 AH站长 原创,转载请注明出处和附带本文链接;
相关推荐
- 05-09网页代码,网页代码快捷键
- 05-06单页网站的代码(完整的网页代码)[20240506更新]
- 05-06个人主页图片代码(个人主页图片代码怎么弄)[20240506更新]
- 05-06提取微信名片代码(微信名片信息提取)[20240506更新]
- 05-06php后台权限管理代码(php管理员权限)[20240506更新]
- 05-06付费观看代码php(付费观看代码)[20240506更新]
- 05-06在线html执行代码(html怎么运行)[20240506更新]
- 05-06源代码管理资源管理器(资源管理器运行代码)[20240506更新]
- 05-06代码源软件库(程序代码库)[20240506更新]
- 05-06点击弹出密码代码(点击弹出密码代码错误)[20240506更新]
取消回复欢迎 你 发表评论:
- 标签列表
- 最近发表
- 友情链接