60pts求调

B3625 迷宫寻路

zhengyi0402 @ 2024-10-11 20:28:07

#include <bits/stdc++.h>
using namespace std;

int n, m, isOk;
char a[105][105];
bool vis[105][105];

struct Pos {
    int x, y;
};
void bfs() {
    queue<Pos> q;
    Pos tmp;
    tmp.x = 1, tmp.y = 1;
    q.push(tmp);
    while(!q.empty()) {
        Pos now = q.front(); // 取 q 的队首元素
        q.pop(); // 将 q 的队首出队
        int x = now.x, y = now.y;
        if(x < 1 || x > n) continue; // 如果 x 的坐标范围非法则跳过
        if(y < 1 || x > m) continue; // 如果 y 的坐标范围非法则跳过
        if(a[x][y]=='#') continue; // 如果第 x 行第 y 列是墙则跳过

        if(vis[x][y]) continue; // 若第 x 行第 y 列已经访问过,则跳过
        vis[x][y]=1; // 将第 x 行第 y 列设置为已经访问过
        if(x == n && y == m){ // 如果到达终点
            isOk = true; return;
        }

        Pos nxt;
        nxt.x = x - 1, nxt.y = y; // 扩展上方相邻结点
        q.push(nxt); // 将这个新的结点放入队列

        nxt.x = x + 1, nxt.y = y; // 扩展上方相邻结点
        q.push(nxt); // 将这个新的结点放入队列

        nxt.x = x, nxt.y = y-1; // 扩展上方相邻结点
        q.push(nxt); // 将这个新的结点放入队列

        nxt.x = x, nxt.y = y+1; // 扩展上方相邻结点
        q.push(nxt); // 将这个新的结点放入队列
    }
}

int main() {
    cin >> n >> m; 
    for(int i = 1; i <= n; i++)
        for(int j = 1; j <= m; j++)
            cin >> a[i][j];

    bfs();

    if(isOk)
        cout << "Yes" << endl;
    else
        cout << "No" << endl;

    return 0;
}
/*

样例输入:

3 5
.##.#
.....
...#.

样例输出

Yes

*/

洛谷网校上A了,但只拿了60pts


by zzz13579zzz @ 2024-10-11 20:33:29

if(y < 1 || x > m) continue;


by zhengyi0402 @ 2024-10-11 20:41:03

Thanks! @ zzz13579zzz 关注你了


|