C为什么01bfs过不了呢,就第一个点过不了

#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
#include <deque>
using namespace std;

typedef long long LL;

typedef pair<int,int>PII;

const int N=2010,M=N*N;

int n,m;
int g[N][N];
int dist[N][N];
bool st[N][N];

int bfs()
{
    memset(st,0,sizeof st);
    memset(dist,0x3f,sizeof dist);
    
    dist[0][0]=0;
    deque<PII>q;
    q.push_back({0,0});
    
    int dx[3]={0,0,1},dy[3]={-1,1,0};
    while(q.size())
    {
        auto t=q.front();
        q.pop_front();
        
        if(st[t.first][t.second])continue;
        st[t.first][t.second]=true;
        
        if(t.first==n-1&&t.second==m-1)break;
        
        for(int i=0;i<3;i++)
        {
            int a=t.first+dx[i],b=t.second+dy[i];
            if(a<0||a>=n||b<0||b>=m)continue;
            
            int u=t.first,v=t.second;
            int w=(g[a][b]==g[u][v])?1:2;
            int d=dist[t.first][t.second]+w;
            
            if(d<dist[a][b])
            {
                dist[a][b]=d;
                if(w==1)q.push_front({a,b});
                else q.push_back({a,b});
            }
        }
    }
    return dist[n-1][m-1];
}
int main()
{
    cin>>n>>m;
    for(int i=0;i<n;i++)
        for(int j=0;j<m;j++)
            scanf("%d",&g[i][j]);
    cout<<bfs()<<endl;
    return 0;
}
```

全部评论
37行换成continue试试
点赞 回复 分享
发布于 2023-12-31 21:12 浙江

相关推荐

不愿透露姓名的神秘牛友
07-24 13:32
点赞 评论 收藏
分享
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务