走迷宫算法

走迷宫算法

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

猜你喜欢

转载自blog.csdn.net/qq_37457202/article/details/82721038