1 条题解

  • 0
    @ 2024-12-24 10:06:06

    C++ :

    #include <stdio.h>
    #include <string.h>
    #include <algorithm>
    #include <queue>
    using namespace std;
    
    struct node{
        int x,y,t;
    };
    bool operator < (node i,node j){
        return i.t>j.t;
    }
    priority_queue<node>q;
    bool vis[12][12];
    int map[12][12];
    int n,m,ans;
    int dx[]={0,1,0,-1};
    int dy[]={-1,0,1,0};
    inline void bfs(int x,int y){
        node vw,vn;
        while(!q.empty()) q.pop();
        vn.x=x,vn.y=y,vn.t=0;
        if(map[x][y]==1) vn.t++;
        q.push(vn);
        memset(vis,0,sizeof(vis));
        vis[x][y]=1;
        while(!q.empty()){
            vn=q.top(),q.pop();
            if(vn.x==n){
                ans=min(ans,vn.t);
            }
            if(vn.t>=ans){
                return;
            }
            for(int i=0;i<4;i++){
                int a=vn.x+dx[i];
                int b=vn.y+dy[i];
                if(a>=1&&a<=n&&b>=1&&b<=m&&!vis[a][b]){
                    vw.x=a,vw.y=b,vw.t=vn.t;
                    vis[a][b]=1;
                    if(map[a][b]==1) vw.t++;
                    q.push(vw);
                }
            }
        }
    }
    int main(){
        while(~scanf("%d%d",&n,&m)){
            for(int i=1;i<=n;i++){
                for(int j=1;j<=m;j++){
                    scanf("%d",&map[i][j]);
                }
            }
            ans=10000;
            for(int i=1;i<=m;i++){
                bfs(1,i);
            }
            printf("%d\n",ans);
        }
        return 0;
    }
    
    
    • 1

    信息

    ID
    1920
    时间
    1000ms
    内存
    128MiB
    难度
    (无)
    标签
    递交数
    0
    已通过
    0
    上传者