1 条题解

  • 1
    @ 2022-11-19 14:57:11

    由于这道题没有题解,所以我是第一个发表的。 这道题我用广搜

    #include <iostream>
    #include <cstring>
    #include <queue>
    using namespace std;
    int n,m, ans;
    char g[105][105];
    int dis[105][105];  //用dis来存储答案
    struct Point
    {
        int x, y;
    };
    queue<Point> q;
    int dx[4] = {1, 0, 0, -1};         //方向数组,没啥好说的,就是确定方向
    int dy[4] = {0, 1, -1, 0};
    void bfs(int startX, int startY)
    {
        memset(dis, -1, sizeof(dis));
        dis[startX][startY] = 0;
        q.push((Point){startX, startY});
        while (q.size() > 0)
        {
            Point now = q.front();
            q.pop();
            if (now.x == n && now.y == m)
            {
                ans = dis[n][m];
                return;
            }
            for (int i = 0;i < 4;i++)
            {
                int nx = now.x + dx[i];
                int ny = now.y + dy[i];
                if (dis[nx][ny] == -1 && g[nx][ny] == '.')
                {
                    q.push((Point){nx,ny});
                    dis[nx][ny] = dis[now.x][now.y]+1;
                }
            }
        }
    }
    int main()
    {
        cin >> n >> m;
        memset(g, '#', sizeof(g));
        for (int i = 1; i <= n; i++)
            for (int j = 1; j <= m; j++)
                cin >> g[i][j];
        ans = -1;
        bfs(1, 1);
        cout << ans+1 << endl;                //由于要带上起点和终点,所以加1
        return 0;
    }
    
  • 1

信息

ID
1918
时间
1000ms
内存
256MiB
难度
2
标签
递交数
81
已通过
49
上传者