迷宫大师 wa80求条

题面:
image
样例:

3 3
...
...
...
4
3 5
...#.
.#.#.
.#...
10

代码:

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;

int n,m;

string a[22];

int dx[]={1,-1,0,0};
int dy[]={0,0,1,-1};

bool vis[22][22];


int bfs(int sx,int sy,int ex,int ey){
    memset(vis,0,sizeof(vis));
    queue<tuple<int,int,int>> q;
    while(!q.empty()) q.pop();
    q.push({sx,sy,0});
    vis[sx][sy]=1;
    while(!q.empty()){
        auto [x,y,c]=q.front();
        q.pop();
        if(x==ex&&y==ey) return c;
        for(int i=0;i<4;i++){
            int xx=x+dx[i];
            int yy=y+dy[i];
            if(xx<0||xx>=n||yy<0||yy>=m) continue;
            if(vis[xx][yy]) continue;
            if(a[xx][yy]=='#') continue;
            vis[xx][yy]=1;
            q.push({xx,yy,c+1});
        }
    }
    return -1;
}

int ans=0;

int main(){
    cin>>n>>m;
    for(int i=0;i<n;i++){
        cin>>a[i];
    }
    
    for(int _x1_=0;_x1_<n;_x1_++){
        for(int _y1_=0;_y1_<m;_y1_++){
            for(int _x2_=0;_x2_<n;_x2_++){
                for(int _y2_=0;_y2_<m;_y2_++){
                    if(a[_x2_][_y2_]=='#'||(_x1_==_x2_&&_y1_==_y2_)) continue;
                    ans=max(ans,bfs(_x1_,_y1_,_x2_,_y2_));
                }
            }
        }
    }

    cout<<ans;

    return 0;
}

wa80分,样例全过

(帖子已被作者删除)

1 个赞

第50行改成if(a[x1][y1]==‘#’||a[x2][y2]==‘#’||(x1==x2&&y1==y2)) continue;

1 个赞

nb,