本人写的迷宫,不过知道这样才能输出所有的路径
来源:互联网 发布:阿里云免费空间申请 编辑:程序博客网 时间:2024/06/05 08:21
本人写的迷宫,不过知道这样才能输出所有的路径,望各高手刺教
#include<stdio.h>
#include<conio.h>
#define M 5
#define N 5
struct queue
{
int x;
int y;
int pre;
}sq[200];
int maze[M+2][N+2];
typedef struct
{ int dx;
int dy;
}moved;
moved move[8];
typedef struct
{
int x;
int y;
}ROAD;
ROAD road[M*N];
void inimove(moved move[]) /*initialize move[]*/
{
move[0].dx=0;move[0].dy=-1;
move[1].dx=1;move[1].dy=-1;
move[2].dx=1;move[2].dy=0;
move[3].dx=1;move[3].dy=1;
move[4].dx=0;move[4].dy=1;
move[5].dx=-1;move[5].dy=1;
move[6].dx=-1;move[6].dy=0;
move[7].dx=-1;move[7].dy=-1;
}
void input(int maze[M+2][N+2])
{
int i,j;char ch;
for(i=0;i<=M;i++) /*set the wall outside the maze*/
{
maze[i][0]=1;
maze[i][N+1]=1;
}
for(j=0;j<=N+1;j++) /*set the wall outside the maze*/
{
maze[0][j]=maze[M+1][j]=1;
}
for(i=1;i<=M;i++) /*input the data of maze*/
for(j=1;j<=N;j++)
{
ch=getch();
maze[i][j]=(int)(ch-48);
printf("%3d",ch-48);
printf(" ");
if(!(j%N))
printf("/n");
}
}
void output(int rear) /*output the path*/
{
int i,j,k;
for(j=0,k=rear;(k!=0)&&(j<M*N);j++)
{
road[j].x=sq[k].x;
road[j].y=sq[k].y;
k=sq[k].pre;
}
for(i=1;i<=M;i++)
for(j=1;j<=N;j++)
{
if(maze[i][j]==-1)
{
for(k=0;k<M*N;k++)
{
if((i==road[k].x)&&(j==road[k].y))
maze[i][j]=8; /*use '8'to mark the path*/
}
if(maze[i][j]==-1)
maze[i][j]=0;
}
printf("%3d",maze[i][j]);
printf(" ");
if(j%N==0)
printf("/n");
}
}
void path() /* seek the path*/
{
int i,j,x,y,v,front,rear,find;
sq[1].x=1;sq[1].y=1;sq[1].pre=0;
find=0;
front=1;rear=1;maze[1][1]=-1;
while(front<=rear&&!find)
{
x=sq[front].x;
y=sq[front].y;
for(v=0;v<=7;v++)
{
i=x+move[v].dx;
j=y+move[v].dy;
if(!maze[i][j])
{
rear++;
sq[rear].x=i;
sq[rear].y=j;
sq[rear].pre=front;
maze[i][j]=-1;
}
if(i==M&&j==N)
{
printf("One of the pathes is:(the path is marked by 8)/n");
output(rear);
find=1;
}
}
front++;
}
if(!find)
printf("There is no path!/n");
}
int check(int maze[M+2][N+2]) /*check whether the data inputed is right*/
{
int i,j,m,n;
for(i=1;i<=M;i++)
for(j=1;j<=N;j++)
{
if((maze[i][j]!=1)&&(maze[i][j]!=0))
{
return(0);
}
}
return(1);
}
main()
{
int i,j;char ch;
printf("The size of the maze is %d*%d./n",M,N);
printf("Input your maze[][](the number you input must be 1 or 0):/n");/*input the data of the maze*/
input(maze);
printf("input completely./n");
while(maze[1][1]==1||maze[M][N]==1||check(maze)==0) /*check whether the data inputed is right .*/
{ /*If the data is wrong,please input again.*/
printf("Warning:maze[][] you input is wrong!/n");
printf("Maze[1][1] and maze[M][N] must both equal 0./n");
printf("Every item of maze[][]must be 1 or 0./n/n");
printf("Input your maze[][] again:/n");
input(maze);
printf("input completely./n");
}
printf("Press any key to display the path./n");
getch();
inimove(move);
path();
printf("press ENTER to end the program:/n");
scanf("%c",&ch);
}
- 本人写的迷宫,不过知道这样才能输出所有的路径
- 输出迷宫的所有路径和最短路径
- 【深度优先_栈】:输出迷宫的所有路径,并求出最短路径长度及最短路径
- 迷宫问题(如何将走去迷宫的路径输出?)
- 改进的走迷宫,可算出所有可行的路径
- 输出所有二叉树的路径
- 迷宫的最优路径
- 迷宫的路径问题
- 本人写的地区js
- 本人写博客的指导思想
- c写的迷宫
- 求取迷宫所有路径
- 实现迷宫问题的所有路径及最短路径程序
- 求解迷宫问题的所有路径及最短路径程序
- 求解迷宫问题的所有路径及最短路径程序
- 找到迷宫的所有路径和最短路径-深度搜索
- 也许曾经看到过,不知道是不是愤青所写,不过有它的价值----日本的秘密(ZT)
- 找到迷宫的所有解
- Linux Tips 之 Post-Installation Fine Tuning
- 小型的文本编辑器(使用能通配符*和?)
- 大哥你好,帮我一下?火急呀
- 扑克牌的发牌程序(用伪随机数实现)
- 改进的发牌程序
- 本人写的迷宫,不过知道这样才能输出所有的路径
- 边锋密码保护计算器
- [computer networks experiments]router algorithms---dijkstra
- 初学者来请教一个简单的问题!
- Windows下的BITS服务
- 12个最重要的J2EE最佳实践
- 工作了,心稳吗
- windows 2000端口映射
- MaxtoCode