题解 | 走迷宫

走迷宫

https://www.nowcoder.com/practice/e88b41dc6e764b2893bc4221777ffe64

#include <bits/stdc++.h>
using namespace std;
const int MAXN =1010;
char f[MAXN][MAXN];
int f2[MAXN][MAXN];
int dir[4][2] = {{0,1},{1,0},{0,-1},{-1,0}};//方位
int n,m;
int x,y;
int x2,y2;
void bfs()
{
    queue<pair<int,int>> q;//打队列
    q.push(make_pair(x,y));
    f2[x][y] = 0;
    while(!q.empty())//bfs模板
    {
        int ux = q.front().first;
        int uy = q.front().second;
        if(ux == x2 && uy == y2)return;//到目标点就退出,剩下的点没必要搜了
        q.pop();
        for(int i=0;i<4;i++)
        {
            int dx = ux + dir[i][0];
            int dy = uy + dir[i][1];
            if(dx<1 || dx>n || dy<1 || dy>m) continue;
            if(f2[dx][dy] != -1 || f[dx][dy] == '*' )continue; 
            f2[dx][dy] = f2[ux][uy] + 1;
            q.push(make_pair(dx,dy));
        }
    }
}

int main()
{
    memset(f2,-1,sizeof(f2));//初始化为-1,为何是-1?因为想少开个数组来判断是否已经访问过
    cin >> n >> m;//输入坐标
    cin >> x >> y;
    cin >> x2 >> y2;
    for(int i=1;i<=n;i++)
    {
        for(int j=1;j<=m;j++)
        {
            cin >> f[i][j];
        }
    }
    bfs();//bfs搜最短路径
    cout << f2[x2][y2] << endl;//输出目标路径
    return 0;
}

全部评论

相关推荐

04-13 18:10
门头沟学院 Java
想熬夜的小飞象在秋招:被腾讯挂了后爸妈以为我失联了
点赞 评论 收藏
分享
03-11 21:46
西北大学 Java
河和静子:这只是实习工资,我学长北大通班博一的,他同学被这家天天发邮件让他去实习,一个月10w
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务