社区讨论
ybt求助
题目总版参与者 1已保存回复 1
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 1 条
- 当前快照
- 1 份
- 快照标识符
- @mijp067c
- 此快照首次捕获于
- 2025/11/29 10:49 3 个月前
- 此快照最后确认于
- 2025/11/29 20:50 3 个月前
http://ybt.ssoier.cn/problem_show.php?pid=1251
CPP#include<bits/stdc++.h>
using namespace std;
struct node{
int x,y,step;
};
char a[100][100];
int i,j,m,n;
int qx,qy,zx,zy;
int BFS(char a[][100],int m,int n){
int qx,qy,zx,zy;
for(int i=1;i<=m;i++)
for(int j=1;j<=n;j++)
{
if(a[i][j]=='@'){
qx=i;qy=j;
}
if(a[i][j]=='*'){
zx=i;zy=j;
}
}
int x,y,step=1;
queue<node> q;
if(a[qx][qy]==1||a[zx][zy]==1){
return -1;}
q.push({qx,qy,0});
while(1){
x=q.front().x;y=q.front().y;step=q.front().step;
if(x-1>=1&&a[x-1][y]!='#'){
q.push({x-1,y,step+1});
a[x-1][y]='#';}
if(x==zx&&y==zy)break;
if(x+1<=m&&a[x+1][y]!='#'){
q.push({x+1,y,step+1});a[x+1][y]='#';}
if(x==zx&&y==zy)break;
if(y-1>=1&&a[x][y-1]!='#'){
q.push({x,y-1,step+1});a[x][y-1]='#';}
if(x==zx&&y==zy)break;
if(y+1<=n&&a[x][y+1]!='#'){
q.push({x,y+1,step+1});a[x][y+1]='#';}
if(x==zx&&y==zy)break;
q.pop();
if(q.empty()){
return -1;
}
}
return step;
}
void inputbinvis(char a[][100],int m,int n){
for(int i=1;i<=m;i++)
for(int j=1;j<=n;j++)
cin>>a[i][j];
}
int s[100],c=0;
int main(){
int m=1,n=1;char a[100][100];
while(cin >> m >> n && (m != 0 || n != 0)){
cin>>m>>n;
inputbinvis(a,m,n);
s[c]=BFS(a,m,n);
c++;
}
for(int i=0;i<c;i++)
cout<<s[i]<<endl;
return 0;
}
运行时出现“已停止工作”
回复
共 1 条回复,欢迎继续交流。
正在加载回复...