0WA,但是vector没RE
查看原帖
0WA,但是vector没RE
727556
wangziwenhk楼主2023/11/29 15:44
#include <bits/stdc++.h>
using namespace std;
struct Node{
    int x,y,time;
};
vector<vector<char>>a;
vector<vector<char>>b;
int start_x,start_y,end_x,end_y;
int n,m;
bool judge(int x,int y){
    if(x>=1 && x<=n && y>=1 && y<=m && b[x][y]!='X'){
        return true;
    }
    return false;
}
void first_op(){
    b=a;
    int dx[]={0,0,1,1,1,-1,-1,-1};
    int dy[]={1,-1,-1,0,1,-1,0,1};
    for(int i=0;i<8;i++){
        int tx=end_x,ty=end_y;
        while(judge(tx,ty)){
            b[tx][ty]='W';
            tx+=dx[i];
            ty+=dy[i];
        }
    }
}
void bfs(){
    int dx[]={1,-1,0,0};
    int dy[]={0,0,1,-1};
    map<pair<int,int>,bool>vis;
    queue<Node>que;
    que.push(Node{start_x,start_y,0});
    vis[make_pair(start_x,start_y)]= true;
    if(b[start_x][start_y]=='W'){
        printf("%d\n",0);
        return;
    }
    while(que.size()){
        Node head = que.front();
        for(int i=0;i<4;i++){
            int tx = head.x+dx[i];
            int ty = head.y+dy[i];
            if(judge(tx,ty) && !vis[make_pair(tx,ty)]){
                if(b[tx][ty]=='W'){
                    printf("%d\n",head.time+1);
                    return;
                }
                que.push(Node{tx,ty,head.time+1});
                vis[make_pair(tx,ty)]= true;
            }
        }
        que.pop();
    }
    printf("Poor Harry\n");
    return;
}
int main() {
    scanf("%d%d",&n,&m);
    a = vector<vector<char>>(n+10,vector<char>(m+10));
    for(int i=1;i<=n;i++){
        for(int j=1;j<=m;j++){
            scanf("%c",&a[i][j]);
            if(a[i][j]=='\n')j--;
        }
    }
    while(true){
        scanf("%d%d%d%d",&end_x,&end_y,&start_x,&start_y);
        if(!end_x && !end_y && !start_x && !start_y)break;
        first_op();
        bfs();
    }
    return 0;
}

2023/11/29 15:44
加载中...