社区讨论
79分 急救 有大佬帮我改吗bfs
P1825[USACO11OPEN] Corn Maze S参与者 2已保存回复 3
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 3 条
- 当前快照
- 1 份
- 快照标识符
- @m0522t62
- 此快照首次捕获于
- 2024/08/22 17:03 2 年前
- 此快照最后确认于
- 2025/11/04 22:44 4 个月前
CPP
#include<bits/stdc++.h>
using namespace std;
int n,m;
char e;
int mg[400][400],f[400][400];
struct dl{
int x,y;
}nw,nxt;
queue<dl> q;
int dx[5]={0,0,0,1,-1};
int dy[5]={0,1,-1,0,0};
int main(){
scanf("%d%d",&n,&m);
memset(f,-1,sizeof(f));
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
scanf(" %c",&e);
if(e=='#') mg[i][j]=1;
else if(e=='=') mg[i][j]=-1;
else if(e=='.') mg[i][j]=0;
else if(e=='@'){
f[i][j]=0;
nw.x=i;
nw.y=j;
q.push(nw);
}
else{
mg[i][j]=e-'A'+10;
}
}
}
while(!q.empty()){
nw=q.front();
q.pop();
for(int i=1;i<=4;i++){
int xx=nw.x+dx[i],yy=nw.y+dy[i];
if(mg[xx][yy]>=10&&mg[nw.x][nw.y]<10){
//printf("##\n");
f[xx][yy]=-1;
}
if(xx>0&&yy>0&&xx<=n&&yy<=m&&mg[xx][yy]!=1&&f[xx][yy]==-1){
if(mg[xx][yy]<10) f[xx][yy]=f[nw.x][nw.y]+1;
if(mg[xx][yy]==0){
nxt.x=xx;
nxt.y=yy;
}
else if(mg[xx][yy]==-1){
printf("%d",f[xx][yy]);
return 0;
}
else if(mg[xx][yy]>=10){
int ff=0;
for(int l=1;l<=n;l++){
for(int ll=1;ll<=m;ll++){
if(mg[l][ll]==mg[xx][yy]&&(yy!=ll||xx!=l)){
ff=1;
nxt.x=l;
nxt.y=ll;
f[l][ll]=f[xx][yy]=f[nw.x][nw.y]+1;
}
}
}
if(ff==0){
nxt.x=xx;
nxt.y=yy;
}
}
q.push(nxt);
}
}
}
return 0;
}
回复
共 3 条回复,欢迎继续交流。
正在加载回复...