Exercise(9):老鼠走迷宫

/*
        冼竞滔
        递归算法求老鼠走迷宫一

    老鼠走迷宫是递回求解的基本题型,
    试以程式求出由入口至出口的路径,入口为左上角,出口为右下角。
    ███████(7×7)
    █        ██
    █  ███  █
    █  █      █ 
    █  █  █  █
    █      █  █
    ███████//迷宫图

    墙的表示:█ 路径的表示:◇
    INPUT
    (无)

    OUTPUT
    显示迷宫:
    ███████
    █        ██
    █  ███  █
    █  █      █
    █  █  █  █
    █      █  █
    ███████

    显示路径:
    ███████
    █◇      ██
    █◇███  █
    █◇█◇◇◇█
    █◇█◇█◇█
    █◇◇◇█◇█
    ███████

    问题分析:
        可通过递归求解. 
*/
/*     本例使用的是dev c++5.10   */
#include <iostream>
using namespace std;

const int Size = 7;         // 地图尺寸 
bool Win = false;           // 判断是否找到终点 
int Map[Size][Size] = {     // 地图  2表示障碍物 1表示路径 0表示空路
    {2,2,2,2,2,2,2},
    {2,0,0,0,0,2,2},
    {2,0,2,2,2,0,2},
    {2,0,2,0,0,0,2},
    {2,0,2,0,2,0,2},
    {2,0,0,0,2,0,2},
    {2,2,2,2,2,2,2}
};

// 显示迷宫 
void ShowMap()
{
    int i,j;
    for(i=0;i<Size;i++)
    {
        for(j=0;j<Size;j++)
        {
            if(Map[i][j]==0)        // 空路输出空格 
                cout<<' ';
            else if(Map[i][j]==1)   // 路径输出█ 
                cout<<'█';
            else if(Map[i][j]==2)   // 障碍物输出◇ 
                cout<<'◇';
        }
        cout<<endl;
    }
}

// 寻找路径 
void SearchPath(int x,int y)
{
    if(x==Size-2 && y==Size-2)                              // 找到终点,结束 
    {
        Map[x][y] = 1;
        Win = true;
        return; 
    }
    if(Map[x][y]==0)
    {
        Map[x][y] = 1;                                      // 当前点置为路径 
        if(Win==false && y+1<Size) SearchPath(x,y+1);       // 向右 → 
        if(Win==false && y-1>=0)     SearchPath(x,y-1);     // 向左 ← 
        if(Win==false && x+1<Size) SearchPath(x+1,y);       // 向下 ↓ 
        if(Win==false && x-1>=0)     SearchPath(x-1,y);     // 向上 ↑ 
        if(Win==false) Map[x][y] = 0;                       // 没找到终点重置当前点为空路 
    }
}

int main()
{
    SearchPath(1,1);
    ShowMap();
    return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值