844. 走迷宫(bfs)

https://www.acwing.com/problem/content/846/
经典bfs
虽然是bfs但是我还是要走一遍dfs
啊(剑魔音)?

还是老老实实走bfs吧

#include<iostream>
#include<queue>
#define x first
#define y second

using namespace std;

typedef pair<int,int>PII;

const int N = 110;
char map[N][N];
int cnt[N][N];//走到此处需要的步数
int n,m;
int dx[4]={0,1,0,-1},dy[4]={1,0,-1,0};

void bfs(int x,int y)
{
    queue<PII>q;
    q.push({x,y});//入队起点
    while(q.size())
    {
        PII t = q.front();
        q.pop();
        for(int i=0;i<4;i++)
        {
            int a=t.x+dx[i],b=t.y+dy[i];
            if(map[a][b]=='1')continue;//撞墙
            if(a<=0 || b<=0 || a>n || b>m)continue;//走出界了
            q.push({a,b});//新点合法,入队
            map[a][b]='1';//标记走过
            cnt[a][b]=cnt[t.x][t.y]+1;
        }
    }    
}

int main()
{
    cin >> n >> m;
    for(int i=1;i<=n;i++)
        for(int j=1;j<=m;j++)
            cin >> map[i][j];
    bfs(1,1);
    cout << cnt[n][m] << endl;
}

 

posted @ 2023-03-02 17:18  风乐  阅读(26)  评论(0)    收藏  举报