社区讨论

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 条回复,欢迎继续交流。

正在加载回复...