UVA - 784 Maze Exploration

题目大意:走迷宫,X 是墙,将 * 能够移动到的范围都用 # 表示然后输出。

解题思路:同样的思路,单层 dfs,碰到墙壁 X 返回,# 说明已遍历,返回,其余就剩空格用 # 覆盖。最后记得把初始位置也置为 #。

#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<cmath>
#include<algorithm>
using namespace std;
char map[100][100];
int n;
void dfs(int r, int c) {
    int len = strlen(map[r]);
    if (r < 0 || r > n || c < 0 || c > len) return;
    if (map[r][c] == 'X' || map[r][c] == '#') return;
    map[r][c] = '#';    

    dfs(r-1, c);
    dfs(r, c-1);
    dfs(r, c+1);
    dfs(r+1, c);
}
int main() {
    int T;
    scanf("%d", &T);
    getchar();
    while (T--) {
        n = 0;
        while(gets(map[n++])) if (map[n-1][0] == '_') break;
        for (int i = 0; i < n; i++)
            for (int j = 0; j < strlen(map[i]); j++) {
                if (map[i][j] == '*') {
                    dfs(i, j);
                    map[i][j] = '#';
                }
            }

        for (int i = 0; i < n; i++)
            printf("%s\n", map[i]);
    }
return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值