⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 张恒13031028second.c

📁 迷宫求解
💻 C
字号:

#include<stdlib.h>
#include<stdio.h>
 struct  postype 
{int x;
int y;
} begin,end;
typedef struct postype posit;
#define MAXLENGTH 100
typedef int  mazetype[MAXLENGTH][MAXLENGTH];
mazetype m;

int x,y,i,j;
 print()
{int i,j;
for(i=0;i<x;i++)
{for(j=0;j<y;j++)
printf("%3d",m[i][j]);
printf("\n");
}}
void init(int k)
{int i,j,x1,y1;
printf("请输入迷宫的行数和列数:");
scanf("%d,%d",&x,&y);

for(i=0;i<x;i++)
{m[0][i]=0;
m[x-1][1]=0;}

for(i=0;i<y-1;i++)
{m[i][0]=0;
m[i][y-1]=0;}
for(i=1;i<x-1;i++)
for(j=1;j<y-1;j++)
m[i][j]=k;
printf("请个数输入迷宫内墙的个数:\n");
scanf("%d",&j);
printf("请依次输入内墙的行数和列数:\n");
for(i=1;i<=j;i++)
{scanf("%d,%d",&x1,&y1);
m[x1][y1]=0;
}
printf("迷宫的结构如下:\n");
print();
printf("请输入迷宫的入口的行数和列数:");
scanf("%d,%d",&begin.x,&begin.y);
printf("请输入迷宫的出口的行数和列数:");
scanf("%d,%d",&end.x,&end.y);}

 extern int curstep=1;
  struct eltype
{int ord;
posit seat;
int di;
};
 typedef  struct eltype quzzle;
 pass(posit b)
{if(m[b.x][b.y]==1)
return 1;
 else return 0;}


footprint(posit a)
{m[a.x][a.y]=curstep;/*使迷宫的M的A点的值变为足迹*/
}
posit nextpos(posit c,int di)
{posit direc[4]={{0,1},{1,0},{0,-1},{-1,0}};/*移动的方向,依次为东南西北*/
c.x+=direc[di].x;
c.y+=direc[di].y;
return c;
}
markprint(posit b)
{m[b.x][b.y]=-1;}/*把迷宫的B点变为-1(表示不能通过的路径)*/
quzzle s[MAXLENGTH];
int top=-1;
posit curpos;
quzzle e;

mazepath(posit start,posit end)
{/*若迷宫中有从入口到出口的路径,则求出放在栈中,并返回TURE;否则则返回FALSE*/
quzzle s[MAXLENGTH];
int top=-1;
posit curpos;
quzzle e;


curpos=start;curstep=1;
do{
	if (pass(curpos)){
footprint(curpos);
e.ord=curstep;
e.seat=curpos;
e.di=0;
if(top>=MAXLENGTH)
{printf("栈的内容已满\n");
return -1;}
top++;
s[top]=e;
curstep++;
if(curpos.x==end.x&&curpos.y==end.y)
return 1;
    nextpos(curpos,e.di);}
else
{if(top!=-1)
{	 if(top<0)
{printf("栈的内容是空的\n");
return -1;}

top--;
curstep--;
while(e.di==3)
{markprint(e.seat);
	 if(top<0)
{printf("栈的内容是空的\n");
return -1;}

top--;
curstep--;
}   
if(e.di<3)
{e.di++;
if(top>=MAXLENGTH)
{printf("栈的内容已满\n");
return -1;}
top++;
s[top]=e;
curstep++;
curpos=e.seat;
nextpos(curpos,e.di);
}}}}
while(top!=-1);
return 0;}

main()
{init(1);
if(mazepath(begin,end))
{print();
}
else printf("no path\n");
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -