社区讨论
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 条回复,欢迎继续交流。
正在加载回复...