解题思路:

注意事项:

参考代码:


#include<bits/stdc++.h>

using namespace std;


class Node {

public:

    int x, y, step;

    Node(int i, int j, int s) {

        x = i;

        y = j;

        step = s;

    }

};


Node start(0, 0, 0);

Node dest(0, 0, 0);

bool visit[201][201] = {false};

char a[201][201];

int dx[4] = {1, 0, -1, 0};

int dy[4] = {0, 1, 0, -1};


int main()

{

    int t, r, c;

    cin >> t;

    for (int k = 0; k < t; k++) {

        cin >> r >> c;

        for (int i = 0; i < r; i++) {

            for (int j = 0; j < c; j++) {

                cin >> a[i][j];

                if (a[i][j] == 'S') {

                    start.x = i;

                    start.y = j;

                    start.step = 0;

                }

                else if (a[i][j] == 'E') {

                    dest.x = i;

                    dest.y = j;

                    dest.step = 0;

                }

            }

        }

        

        queue<Node> q;

        bool found = false;

        int res = 0;

        q.push(start);

        

        while (!q.empty()) {

            Node front = q.front();

            q.pop();

            if (front.x == dest.x && front.y == dest.y) {

                found = true;

                res = front.step;

                break;

            }

            

            for (int d = 0; d < 4; d++) {

                int tx = front.x + dx[d];

                int ty = front.y + dy[d];

                if (tx >= 0 && tx < r && ty >= 0 && ty < c 

                    && !visit[tx][ty] && a[tx][ty] != '#') {

                    visit[tx][ty] = true;

                    q.push(Node(tx, ty, front.step + 1));

                }

            }

        }

        if (found) {

            cout << res << endl;

        } else {

            cout << "oop!" << endl;

        }

        memset(visit, false, sizeof(visit));

    }

    return 0;

}


点赞(0)
 

0.0分

0 人评分

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

评论列表 共有 0 条评论

暂无评论