迷宫的解
来源:互联网 发布:中国气象站点数据 编辑:程序博客网 时间:2024/04/30 09:06
#include <stdio.h>
#include "time.h"
#define MaxSize 100
#define M 8
#define N 8
void prints(int s[10][10])
{
int i,j;
for(i=0;i<10;i++)
{ for(j=0;j<10;j++)
{if(s[i][j]==1)printf("█");
else if(s[i][j]==0)printf(" ");
else if(s[i][j]==2)printf(" ");
else printf("●");
}printf("/n");
}
}
int mg[M+2][N+2]=
{
{1,1,1,1,1,1,1,1,1,1},
{1,0,0,0,1,0,0,1,0,1},
{1,0,0,1,0,0,0,1,0,1},
{1,0,0,0,0,1,1,0,0,1},
{1,0,1,1,1,0,0,0,0,1},
{1,0,0,0,1,0,0,0,0,1},
{1,0,1,0,0,0,1,0,0,1},
{1,0,1,1,1,0,1,1,0,1},
{1,1,0,0,0,0,0,0,0,1},
{1,1,1,1,1,1,1,1,1,1}
};
struct
{ int i,j; /*方块的位置*/
int pre; /*本路径中上一方块在Qu中的下标*/
} Qu[MaxSize];
int front=-1,rear=-1; /*分别为队首指针和队尾指针*/
void print(int front) /*从队列中输出路径*/
{
int k=front,j;
do /*反向找到最短路径,将该路径上的方块的pre成员设置成-1*/
{ j=k;
k=Qu[k].pre;
Qu[j].pre=-1;
} while (k!=0);
k=0;
while (k<MaxSize) /*正向搜索到pre为-1的方块,即构成正向的路径*/
{ if (Qu[k].pre==-1)
{ mg[Qu[k].i][Qu[k].j]=3;//将正向路径中的方块都置为3,作为标记
}
k++;
}
}
int mgpath(int xi,int yi,int xe,int ye) /*搜索路径为:(xi,yi)->(xe,ye)*/
{
int i,j,find=0,di;
rear++;
Qu[rear].i=xi;Qu[rear].j=yi; /*(xi,yi)进队*/
Qu[rear].pre=-1;
mg[1][1]=-1; /*将其赋值-1,以避免回过来重复搜索*/
while (front<=rear && !find) /*队列不为空且未找到路径时循环*/
{
front++; /*出队,由于不是环形队列,该出队元素仍在队列中*/
i=Qu[front].i;j=Qu[front].j;
if (i==xe && j==ye) /*找到了出口,输出路径*/
{
find=1;
print(front); /*调用print函数输出路径*/
return(1); /*找到一条路径时返回1*/
}
for (di=0;di<4;di++) /*循环扫描每个方位,把每个可走的方块插入队列中*/
{
switch(di)
{case 1:i=Qu[front].i;j=Qu[front].j+1;break;
case 3:i=Qu[front].i,j=Qu[front].j-1; break;
case 2:i=Qu[front].i+1;j=Qu[front].j;break;
case 0:i=Qu[front].i-1;j=Qu[front].j;break;
}
if (mg[i][j]==0)
{ rear++; /*将该相邻方块插入到队列中*/
Qu[rear].i=i;Qu[rear].j=j;
Qu[rear].pre=front; /*指向路径中上一个方块的下标*/
mg[i][j]=2; /*将其赋值-1,以避免回过来重复搜索*/
}
}
}
return(0); /*未找到一条路径时返回1*/
}
int main()
{int i,j=0;
system("title 少杰的迷宫@Jokers_i");
system("color 3b");
printf("迷宫如下,你知道怎么走出去吗?输入“4”就能显示答案哦!/n");
prints(mg);
scanf("%d",&i);
if(i==4)
{ printf("迷宫路径如下:/n");
printf("耗时%GS==%i/n",clock()/1000.0,clock());
mgpath(1,1,M,N);
prints(mg);printf("耗时%GS/n",clock()/1000.0);
}
//else printf("其实你真的很笨!");
system("pause");
return 0;}
- 迷宫的解
- 找到迷宫的所有解
- 迷宫及走迷宫时的最优解
- C++ 编写的栈解迷宫程序
- 迷宫问题的非递归解
- 解迷宫问题的Java实现
- 找到迷宫一条路的解
- 关于迷宫的算法
- c写的迷宫
- 生活的迷宫
- 走迷宫的问题
- 转载的迷宫程序
- 栈的迷宫算法
- C#迷宫的实现~~
- 坑人的迷宫
- 书上的习题:迷宫
- 小希的迷宫
- 生成迷宫的程序
- 优先级判定表OSUnMapTbl 生成代码
- java中的static详解
- JAVA得到网卡物理地址(windows和Linux)
- 跟小彤学Qt--自定义对话框
- .NET学习手记之:WPF--路由事件
- 迷宫的解
- Ubuntu 10.10 开源版飞信安装
- 什么是DTD?
- File Geodatabase与Personal Geodatabase对比
- FB02修改BAPI
- delphi编程实现免杀捆绑
- Web 服务编程技巧与窍门: 数组局限性 -- 零数组(null)与空数组(empty)
- 获取上一级页面的地址,关闭打开的新页面,重载上一级页面
- QQ 游戏到底是如何实现百万人同时在线并保持游戏高效率的呢?