走迷宫算法
// 7-maze.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include <iostream>
#include <cstdio>
using namespace std;
int visit(int, int);
//迷宫矩阵,2代表墙壁,0代表通道
int maze[7][7] = {{2, 2, 2, 2, 2, 2, 2},
{2, 0, 0, 0, 0, 0, 2},
{2, 0, 2, 0, 2, 0, 2},
{2, 0, 0, 2, 0, 2, 2},
{2, 2, 0, 2, 0, 2, 2},
{2, 0, 0, 0, 0, 0, 2},
{2, 2, 2, 2, 2, 2, 2}};
int rows[4] ={1,0,-1,0};
int columns[4]={0,1,0,-1};
int startI = 1, startJ = 1; // 入口
int endI = 5, endJ = 5; // 出口
int success = 0;
int main(void)
{
int i, j;
printf("显示迷宫:\n");
for(i = 0; i < 7; i++)
{
for(j = 0; j < 7; j++)
{
if(maze[i][j] == 2)
printf("█");
else
printf(" ");
}
printf("\n");
}
if(visit(startI, startJ) == 0)
{
printf("\n没有找到出口!\n");
}
else
{
printf("\n显示路径:\n");
for(i = 0; i < 7; i++)
{
for(j = 0; j < 7; j++)
{
if(maze[i][j] == 2)
printf("█");
else if(maze[i][j] == 1)
printf("◇");
else
printf(" ");
}
printf("\n");
}
}
cin>>i;
return 0;
}
int visit(int i, int j)
{
//该点走过,标记为1
maze[i][j] = 1;
//走到终点,成功
if(i == endI && j == endJ)
success = 1;
//向四个方向递归调用函数visit()
for(int k=0;k<4;k++)
{
if (success != 1 && maze[i+rows[k]][j+columns[k]] == 0)
{
visit(i+rows[k], j+columns[k]);
}
}
//该点走过,但没成功,则该点重新置为0
if(success != 1)
maze[i][j] = 0;
return success;
}