经典游戏算法之走迷宫

问题描述:使用二维数组构建迷宫,用2代表墙壁,1代表行走路径,0表示可走路径,找出从起点到终点的路径。

函数说明:

bool visit_maze(int maze[][SIZE],int ,int );

遍历迷宫的主要函数,传入代表迷宫的数组及起始位置,函数将从起始位置开始遍历相邻位置以发现可行路径。

具体步骤为,将当前位置置1表示走过该位置,然后依序遍历位置(如:右上左下)递归调用该函数,若到达终点则返回真,否则将当前位置置回0并返回假。

bool judge_arrived(int maze[][SIZE],int i, int j);

判断是否到达终点的函数,传入当前位置坐标及迷宫数组,函数返回终点坐标的值,若已到达终点则返回的为1,否则返回的为0。

void print_maze(int maze[][SIZE]);

输出迷宫,值为2的地方输出█表示墙壁,为1的地方输出*表示走过的路径,其余为空。

C++代码:

/*
二维数组中,用2代表墙壁,1代表行走路径,0表示可走路径
*/
#include 
#define SIZE 7
#define END_I 5
#define END_J 5
using namespace std;

bool visit_maze(int maze[][SIZE],int ,int );
bool judge_arrived(int maze[][SIZE],int ,int );
void print_maze(int maze[][SIZE]);

bool visit_maze(int maze[][SIZE],int i,int j)
{
    maze[i][j]=1;                   //当前路径置1
    if(!judge_arrived(maze,i,j)&&maze[i][j+1]==0)visit_maze(maze,i,j+1);
    if(!judge_arrived(maze,i,j)&&maze[i+1][j]==0)visit_maze(maze,i+1,j);
    if(!judge_arrived(maze,i,j)&&maze[i][j-1]==0)visit_maze(maze,i,j-1);
    if(!judge_arrived(maze,i,j)&&maze[i-1][j]==0)visit_maze(maze,i-1,j);

    if(!judge_arrived(maze,i,j))maze[i][j]=0;
    return judge_arrived(maze,i,j);
}

bool judge_arrived(int maze[][SIZE],int i,int j)
{
    return maze[END_I][END_J];       //到达终点返回1否则返回0
}

void print_maze(int maze[][SIZE])
{
    for(int i=0;i>start_i>>start_j;
    if(visit_maze(maze,start_i,start_j))print_maze(maze);
    else cout<<"没找到出路!"< 
  

你可能感兴趣的:(C/C++,算法,游戏,c)