模拟迷宫

#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;
}

时间: 2024-12-31 13:12:07

模拟迷宫的相关文章

队列 bfs 迷宫-用bfs走迷宫 队列是自己模拟的

问题描述 用bfs走迷宫 队列是自己模拟的 迷宫问题: 给定一个大小为N*M的迷宫,迷宫由通道和墙壁组成('#','.','S','G'分别表示墙.通道.起点和终点),每一步可以向邻接的上下左右四个方向移动.请给出从起点到终点所需的最小步数.假定起点一定可以到达终点. 没使用STL 我自己模拟队列运行 怎么运行都崩溃 源码 #include<iostream> #include<queue> using namespace std; struct point { int x; in

用webgl打造自己的3D迷宫游戏

用webgl打造自己的3D迷宫游戏 2016/09/19 · JavaScript · WebGL 原文出处: AlloyTeam    背景:前段时间自己居然迷路了,有感而发就想到写一个可以让人迷路的小游戏,可以消(bao)遣(fu)时(she)间(hui) 没有使用threejs,就连glMatrix也没有用,纯原生webgl干,写起来还是挺累的,不过代码结构还是挺清晰的,注释也挺全的,点开全文开始迷宫之旅~ 毕竟要赚一点PV,所以开头没有贴地址,现在贴地址: github:https://

【Qt编程】3D迷宫游戏

       说起迷宫想必大家都很熟悉,个人感觉迷宫对人的方向感是很大的考验,至少我的方向感是不好的,尤其是在三维空间中.由于这段时间帮导师做项目用到了三维作图,便心血来潮想做个三维迷宫玩玩.要想画出三维的迷宫游戏,我们需要先从二维开始. 二维迷宫: 迷宫的程序描述:         现实生活中,我们经常将问题用数学的方法来描述并解决(数学建模).同样的,我们想用程序来解决问题,就得把问题程序化.废话不多说,进入正题:         我们可以用一个矩阵matrix来描绘整个迷宫:元素为1,代表

迷宫探索

/*迷宫由 N W S E 组成 踩到N向上走一格 踩到W 向左走一格 踩到S向下走一格 踩到E 向右走一格 输入迷宫行数 列数 不大于10 机器人初始列数(注意 这个列数是从1开始数的) 判断能否走出迷宫.能走出输出步数 多组输入 遇 0 0 0 结束输入 例 输入 4 6 5 NNNNSN NNNSWN NNSWNN NSWNNN 3 5 2 NSNNNN NSWNNN NENNNN 0 0 0 输出 7 no */ /*分析:程序输入 n m c 即行 列 机器人位置:passed[ii]

模拟经营一招鲜 开罗游戏汉化精选

冒险迷宫村&百货商店日记相信大多数游戏玩家都不会对开罗游戏(Kairosoft)这个名字感到陌生,尤其是 模拟经营游戏迷们,更是对Kairosoft的游戏赞不绝口.开罗游戏是一家专门致力于开发各种像素类模拟经营游戏的公司,而且除此之外,从不涉及其它游戏类型.看似他们经营范围非常狭窄,但正所谓一招鲜,吃遍天,他们每发布一款游戏,都能成为模拟经营游戏中的经典被玩家追捧.不过一般开罗游戏都只有日文和英文两种语言版本,让不少中国的玩家望而却步.幸好国内有一些汉化团队已经为我们汉化了开罗游戏中的一些经典作

阿里云发布异构计算产品家族,你可以在上面模拟核爆炸

本文讲的是阿里云发布异构计算产品家族,你可以在上面模拟核爆炸 数据.算力和算法,这是人工智能发展的三大要素. 近一年来,人工智能迎来了史上第三次热潮.移动互联网时代沉淀下来的大量数据和GPU近几年的快速发展,让学界和业界相信,这人工智能时代真的要来了. 由于人工智能模型训练对算力的要求,原有的通用型CPU架构无法满足,不少企业或科研机构在训练模型的时候会通过采用和主处理器(CPU)不同架构的加速器件(也就是所谓"异构"),如GPU.FPGA.ASIC等器件,提供高密度并行计算的运算能力

新浪微博模拟登录(Java)

     使用HttpClient模拟新浪微博登录,贴在这里做个备忘,也希望能帮助到有这方面需求的童鞋们,代码如下:        Java代码   package com.yida.spider4j.crawler.test.sina;      import java.io.UnsupportedEncodingException;   import java.math.BigInteger;   import java.net.URLEncoder;   import java.secur

Excel工作表中使用模拟运算表的方法

  Excel工作表中使用模拟运算表的方法          1.创建一个新的Excel工作表,并在工作表输入数据.在B9单元格中输入提成金额的计算公式"=$B$2*$B$3",如图1所示. 图1 创建工作表并输入公式 2.在B10:B23单元格区域中输入提成比率,然后选择用于创建模拟运算表的单元格B9:I23,在"数据"选项卡的"数据工具"组中单击"模拟分析"按钮,在打开的下拉列表中选择"模拟运算表"选项

控制-android 4.X如何模拟鼠标或者直接用代码调出鼠标光标

问题描述 android 4.X如何模拟鼠标或者直接用代码调出鼠标光标 最近在做android设备之间的远程控制,需要在一个android客户端(装了客户端软件)中控制另一android服务器端(装了服务器后台程序),在服务器调出android鼠标光标,请问怎么实现啊?求助.....大侠们.....