模拟迷宫
来源:互联网 发布:外贸工作软件 编辑:程序博客网 时间:2024/04/29 13:53
#include<stdio.h>
#define ROW 8
#define COLUMN 8
#define STEP ROW*COLUMN
/*ROW表示迷宫的行数,COLUMN表示迷宫的列数,STEP表示队列的容量*/
//定义一个用来记录迷宫探路的队列
struct StepQueue
{
int x,y;
int PreStep;
}StepQ[STEP],tmpStepQ[STEP];
//定义一个结构体用来表示迷宫中的移动方向,一共有8种方向
struct MoveD
{
/*x,y坐标增量,取值-1,0,1*/
int x, y;
}move[8];
//迷宫探路函数
int PathMaze(int maze[ROW][COLUMN])
{
int i,j,k,v,front,rear,x,y,l;
/*声明一个标记数组来记录一个是否到达过某个点,并进行初始化*/
int mark[ROW][COLUMN];
for(i=0;i<ROW;i++)
for(j=0;j<COLUMN;j++)
mark[i][j]=0;
/*初始化入口点*/
StepQ[1].x=1;
StepQ[1].y=1;
StepQ[1].PreStep=0;
front=1;
rear=1;
mark[1][1]=1;
while(front<=rear)
{
/*以(x,y)为出发点进行搜索*/
x=StepQ[front].x;
y=StepQ[front].y;
/*搜索(x,y)的8个相邻(i,j)是否可以到达*/
for(v=0;v<8;v++)
{
i=x+move[v].x;
j=y+move[v].y;
/*(i,j)为可以到达点,将起入队*/
if((maze[i][j]==0)&&(mark[i][j]==0))
{
rear++;
StepQ[rear].PreStep=front;
StepQ[rear].x=i;
StepQ[rear].y=j;
mark[i][j]=1;
}
/*如果到达出口,则输出路径*/
if((i==ROW-2)&&(j==COLUMN-2))
{
printf("\nThe Path in this maze is: \n\n");
k=rear;
l=0;
/*k==0说明已经到达*/
while(k!=0)
{
tmpStepQ[l++].x=StepQ[k].x;
tmpStepQ[l++].y=StepQ[k].y;
/*找前一点*/
k=StepQ[k].PreStep;
}
/*输出路径*/
while(l>0)
printf("(%d,%d)>",tmpStepQ[--l].x,tmpStepQ[--l].y);
printf("(%d,%d)",tmpStepQ[0].x,tmpStepQ[0].y);
return(1);
}
}
/*从队列中弹出一个点,front指向新的出发点*/
front++;
}
/*队空说明没有路径*/
printf("There is no Path in the maze! \n");
return(0);
}
//迷宫生成函数
void CreateMaze(int maze[ROW][COLUMN])
{
int i,j;
for(i=0;i<COLUMN;i++)
{
maze[0][i]=1;
maze[ROW-1][i]=1;
}
for(i=0;i<ROW;i++)
{
maze[i][0]=1;
maze[i][COLUMN-1]=1;
}
maze[1][1]=0;maze[1][2]=1;maze[1][3]=0;maze[1][4]=1;maze[1][5]=1;maze[1][6]=0;
maze[2][1]=1;maze[2][2]=0;maze[2][3]=0;maze[2][4]=1;maze[2][5]=1;maze[2][6]=0;
maze[3][1]=0;maze[3][2]=1;maze[3][3]=1;maze[3][4]=0;maze[3][5]=0;maze[3][6]=1;
maze[4][1]=1;maze[4][2]=0;maze[4][3]=0;maze[4][4]=1;maze[4][5]=1;maze[4][6]=0;
maze[5][1]=1;maze[5][2]=1;maze[5][3]=0;maze[5][4]=0;maze[5][5]=1;maze[5][6]=1;
maze[6][1]=0;maze[6][2]=1;maze[6][3]=1;maze[6][4]=1;maze[6][5]=0;maze[6][6]=0;
for(i=0;i<ROW;i++)
{
printf("\n ");
for(j=0;j<COLUMN;j++)
printf("%2d",maze[i][j]);
}
}
int main()
{
/*声明一个用来放迷宫的数组*/
int maze[ROW][COLUMN];
/*初始化移动方向数组*/
move[0].x=-1;move[0].y=-1;move[1].x=-1;move[1].y=0;
move[2].x=-1;move[2].y=1;move[3].x=0;move[3].y=-1;
move[4].x=0;move[4].y=1;move[5].x=1;move[5].y=-1;
move[6].x=1;move[6].y=0;move[7].x=1;move[7].y=1;
/*创建一个迷宫*/
CreateMaze(maze);
/*迷宫中探路*/
PathMaze(maze);
getch();
return 0;
}
#define ROW 8
#define COLUMN 8
#define STEP ROW*COLUMN
/*ROW表示迷宫的行数,COLUMN表示迷宫的列数,STEP表示队列的容量*/
//定义一个用来记录迷宫探路的队列
struct StepQueue
{
int x,y;
int PreStep;
}StepQ[STEP],tmpStepQ[STEP];
//定义一个结构体用来表示迷宫中的移动方向,一共有8种方向
struct MoveD
{
/*x,y坐标增量,取值-1,0,1*/
int x, y;
}move[8];
//迷宫探路函数
int PathMaze(int maze[ROW][COLUMN])
{
int i,j,k,v,front,rear,x,y,l;
/*声明一个标记数组来记录一个是否到达过某个点,并进行初始化*/
int mark[ROW][COLUMN];
for(i=0;i<ROW;i++)
for(j=0;j<COLUMN;j++)
mark[i][j]=0;
/*初始化入口点*/
StepQ[1].x=1;
StepQ[1].y=1;
StepQ[1].PreStep=0;
front=1;
rear=1;
mark[1][1]=1;
while(front<=rear)
{
/*以(x,y)为出发点进行搜索*/
x=StepQ[front].x;
y=StepQ[front].y;
/*搜索(x,y)的8个相邻(i,j)是否可以到达*/
for(v=0;v<8;v++)
{
i=x+move[v].x;
j=y+move[v].y;
/*(i,j)为可以到达点,将起入队*/
if((maze[i][j]==0)&&(mark[i][j]==0))
{
rear++;
StepQ[rear].PreStep=front;
StepQ[rear].x=i;
StepQ[rear].y=j;
mark[i][j]=1;
}
/*如果到达出口,则输出路径*/
if((i==ROW-2)&&(j==COLUMN-2))
{
printf("\nThe Path in this maze is: \n\n");
k=rear;
l=0;
/*k==0说明已经到达*/
while(k!=0)
{
tmpStepQ[l++].x=StepQ[k].x;
tmpStepQ[l++].y=StepQ[k].y;
/*找前一点*/
k=StepQ[k].PreStep;
}
/*输出路径*/
while(l>0)
printf("(%d,%d)>",tmpStepQ[--l].x,tmpStepQ[--l].y);
printf("(%d,%d)",tmpStepQ[0].x,tmpStepQ[0].y);
return(1);
}
}
/*从队列中弹出一个点,front指向新的出发点*/
front++;
}
/*队空说明没有路径*/
printf("There is no Path in the maze! \n");
return(0);
}
//迷宫生成函数
void CreateMaze(int maze[ROW][COLUMN])
{
int i,j;
for(i=0;i<COLUMN;i++)
{
maze[0][i]=1;
maze[ROW-1][i]=1;
}
for(i=0;i<ROW;i++)
{
maze[i][0]=1;
maze[i][COLUMN-1]=1;
}
maze[1][1]=0;maze[1][2]=1;maze[1][3]=0;maze[1][4]=1;maze[1][5]=1;maze[1][6]=0;
maze[2][1]=1;maze[2][2]=0;maze[2][3]=0;maze[2][4]=1;maze[2][5]=1;maze[2][6]=0;
maze[3][1]=0;maze[3][2]=1;maze[3][3]=1;maze[3][4]=0;maze[3][5]=0;maze[3][6]=1;
maze[4][1]=1;maze[4][2]=0;maze[4][3]=0;maze[4][4]=1;maze[4][5]=1;maze[4][6]=0;
maze[5][1]=1;maze[5][2]=1;maze[5][3]=0;maze[5][4]=0;maze[5][5]=1;maze[5][6]=1;
maze[6][1]=0;maze[6][2]=1;maze[6][3]=1;maze[6][4]=1;maze[6][5]=0;maze[6][6]=0;
for(i=0;i<ROW;i++)
{
printf("\n ");
for(j=0;j<COLUMN;j++)
printf("%2d",maze[i][j]);
}
}
int main()
{
/*声明一个用来放迷宫的数组*/
int maze[ROW][COLUMN];
/*初始化移动方向数组*/
move[0].x=-1;move[0].y=-1;move[1].x=-1;move[1].y=0;
move[2].x=-1;move[2].y=1;move[3].x=0;move[3].y=-1;
move[4].x=0;move[4].y=1;move[5].x=1;move[5].y=-1;
move[6].x=1;move[6].y=0;move[7].x=1;move[7].y=1;
/*创建一个迷宫*/
CreateMaze(maze);
/*迷宫中探路*/
PathMaze(maze);
getch();
return 0;
}
0 0
- 模拟迷宫
- 模拟迷宫 深搜
- 栈模拟迷宫
- 迷宫问题,二维数组模拟迷宫;
- 模拟求解迷宫问题(DFS+BFS)
- 2014.9.27模拟赛【栅栏迷宫】
- hdu1035-模拟问题 机器人走迷宫
- poj 3984 迷宫问题(模拟队列)
- 深度优先算法--之模拟迷宫
- 数据结构作业 迷宫问题 模拟 之基础的BFS DFS
- poj3984迷宫问题 广搜+最短路径+模拟队列
- 利用 Cocos2dx-3.0 新物理特性模拟弹珠迷宫
- 经典算法~~迷宫---用栈模拟递归实现
- linux下c/c++实例之十六简单模拟迷宫
- 00003 不思议迷宫.0009.2.2:自动换装:界面模拟
- C/C++广度优先搜索模拟迷宫求解问题
- jzoj. 3522. 【NOIP2013模拟11.7B组】迷宫花园(maze)
- 3522. 【NOIP2013模拟11.7B组】迷宫花园(maze)
- 修改host
- iOS7 文本转语音 AVSpeechSynthesizer
- 简单工厂+策略模式-下
- 用户控件 vs 自定义控件
- IntelliJ IDEA12.1.1+Tomcat 7.0.39+Jrebel 5.2.2开发及热部署
- 模拟迷宫
- 面试要点汇总
- C#当前应用程序路径及环境变量
- 黑马程序员---java基础加强---jdk1.5新特性之泛型
- 过来人教你如何更高效的学习《职业能力综合测试》
- caffe神经网络框架的辅助工具(将图片转换为leveldb格式)
- 山东理工ACM【1239】水仙花数
- 黑马程序员_小知识点集合
- cxf动态调用外部web service 报告异常java.lang.NoSuchFieldError: QUALIFIED