0
点赞
收藏
分享

微信扫一扫

求解迷宫问题

沪钢木子 2022-04-06 阅读 70
算法

问题描述

有一 8×8 的迷宫图,其中 O 表示通路方块,X 表示障碍方块。假设入口位置为 (0,0),出口为右下角方块位置 (7,7)。设计一个程序求指定入口到出口的一条迷宫路径。

输入描述

8 行,每行 8 个字符表示迷宫。

输入保证至少存在一条合法路径。

输出描述

8 行,每行 8 个字符,空格表示所选路径。

样例输入

Copy to Clipboard
OXXXXXXX OOOOOXXX XOXXOOOX XOXXOXXO XOXXXXXX XOXXOOOX XOOOOXOO XXXXXXXO 

样例输出

Copy to Clipboard
XXXXXXX OOOXXX X XXOOOX X XXOXXO X XXXXXX X XX X X X XXXXXXX 

/*
 * @Description: To iterate is human, to recurse divine.
 * @Autor: Recursion
 * @Date: 2022-03-27 10:13:54
 * @LastEditTime: 2022-04-06 11:30:22
 */
#include<bits/stdc++.h>
using namespace std;
const int N = 10;
char a[N][N];
int dx[4] = {0,0,1,-1};
int dy[4] = {1,-1,0,0};
int n,m;

void dfs(int x,int y)
{
    if(x == 8&&y == 8){
        for(int i = 1;i <= 8;i ++){
            for(int j = 1;j <= 8;j ++)
                cout << a[i][j];
            cout << endl;
        }
        exit(0);
    }
    for(int i = 0;i < 4;i ++){
        int tx = x + dx[i];
        int ty = y + dy[i];
        if(tx > 0&&tx <= 8&&ty > 0&& ty <=8&&a[tx][ty] == 'O'){
            a[tx][ty] = ' ';
            dfs(tx,ty);
            a[tx][ty] = 'O';
        }
    }
    return;
}

int main()
{

    for(int i = 1;i <= 8;i ++)
        for(int j = 1;j <= 8;j ++)
            cin >> a[i][j];
    // for(int i = 1;i <= 8;i ++){
    //         for(int j = 1;j <= 8;j ++)
    //             cout << a[i][j];
        // cout << endl;
    //}
    a[1][1] = ' ';
    dfs(1,1);
}
/*
OXXXXXXX
OOOOOXXX
XOXXOOOX
XOXXOXXO
XOXXXXXX
XOXXOOOX
XOOOOXOO
XXXXXXXO
*/
举报

相关推荐

0 条评论