社区讨论

站外题求助(也不算?)

学术版参与者 3已保存回复 10

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
10 条
当前快照
1 份
快照标识符
@lo2jywqu
此快照首次捕获于
2023/10/23 15:04
2 年前
此快照最后确认于
2023/10/23 15:04
2 年前
查看原帖
题目描述
当你站在一个迷宫里的时候,往往会被错综复杂的道路弄得失去方向感,如果你能得到迷宫地图,事情就会变得非常简单。 假设你已经得到了一个n*m的迷宫的图纸,请你判断是否可以走出迷宫。
输入描述 第一行是两个整数n和m(1<=n,m<=50),表示迷宫的行数和列数。 接下来n行,每行一个长为m的字符串,表示整个迷宫的布局。字符'.'表示空地,'#'表示墙,'S'表示起点,'T'表示出口。
输出描述 如果能走出迷宫输出Yes,否则输出No。
样例1 输入
3 3
S#T
.#.
...
输出 Yes
蒟蒻代码:```
C
#include<bits/stdc++.h>
using namespace std;
int n, m;
char a[1005][1005]; 
char sx = 'S', sy = 0, ex = 'T', ey = 0;
bool flag;
int dx[4] = {-1, 0, 0, 1}, dy[4] = {0, -1, 1, 0};
void dfs(int x, int y){
    a[x][y] = 1;
     if(x == ex && y == ey){
        flag = 1;
        return;
    }
    for(int i = 0; i < 4; i++){
        int nx = x + dx[i], ny = y + dy[i];
        if(nx >= 1 && nx <= n && ny >= 1 && ny <=m && a[nx][ny] == '.' || 'T')dfs(nx, ny);
        if(flag)return;
    }
   
}
int main(){
    cin >> n >> m;getchar();
    for(int i = 1; i <= n; i++)
        for(int j = 1; j <= m; j++){
            cin >> a[i][j];getchar();
    }
    sx = 0, sy = 0, ex = 0, ey = 0;
    dfs(sx, sy);
    if(flag == 1){
        cout << "Yes";
    }
    else{
        cout << "No";
    }
    return 0;
}

回复

10 条回复,欢迎继续交流。

正在加载回复...