社区讨论

60分

P1649[USACO07OCT] Obstacle Course S参与者 1已保存回复 0

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
0 条
当前快照
1 份
快照标识符
@mljagbfc
此快照首次捕获于
2026/02/12 18:00
7 天前
此快照最后确认于
2026/02/15 09:30
4 天前
查看原帖
CPP
#include <bits/stdc++.h>
using namespace std;
int n;
char a[105][105];
int dp[105][105];
int w[105][105];
int x,y;
int dx[]={1,-1,0,0};
int dy[]={0,0,1,-1};
void dfs(int x,int y,int j,int k){ 
    dp[x][y]=min(dp[x][y],k);
    for(int i=0;i<4;i++){
        int x2=dx[i]+x;
        int y2=dy[i]+y;
        if(x2<1||y2<1||x2>n||y2>n||a[x2][y2]=='x'||w[x2][y2]==1){continue;}
        if(i==j||j==-1){
            w[x][y]=1;
            dfs(x2,y2,i,k);
            w[x][y]=0;
        }else{
            w[x][y]=1;
            dfs(x2,y2,i,k+1);
            w[x][y]=0;
        }
    }
}
int main(){
    ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
    memset(dp,0x3f,sizeof dp);
    cin>>n;
    int x2,y2;
    for(int i=1;i<=n;i++){
        for(int j=1;j<=n;j++){
            cin>>a[i][j];
            if(a[i][j]=='A'){
                x=i,y=j;
            }else if(a[i][j]=='B'){
                x2=i,y2=j;
            }
        }
    }
    w[x][y]=1;
    dfs(x,y,-1,0);
    if(dp[x2][y2]==0x3f3f3f3f){
        cout<<-1;
    }else{
        cout<<dp[x2][y2];
    }
    return 0;
}

回复

0 条回复,欢迎继续交流。

正在加载回复...