站外题求助
  • 板块学术版
  • 楼主QWQ_jyc
  • 当前回复5
  • 已保存回复5
  • 发布时间2023/7/5 16:54
  • 上次更新2023/11/3 11:28:47
查看原帖
站外题求助
760850
QWQ_jyc楼主2023/7/5 16:54

大B 在一个边长为 N 的正方形迷宫内。大A 想让你帮他算算,他最短可以在几个单位时间后获胜。

大A 把这个房间的地图用符号画了出来,他规定:

. 代表这个地方是没有障碍的。

*代表这个地方有障碍物,是不可走的。

A 代表大A的初始位置。

B 代表大B的初始位置。

#include <bits/stdc++.h>
using namespace std;
char a[1005][1005];
int b1[10005],b2[10005],fx[4][2]={{-1,0},{0,1},{1,0},{0,-1}};
bool v[10005][10005];
int n,ax,t,ay,bx,by,s;
queue<int>qx,qy;
void f(){
	int j;
	qx.push(ax);
	qy.push(ay);
	a[ax][ay]=0;
	v[ax][ay]=true;
	if(j<=t)
	while(!qx.empty()&&t>=0){
		int x=qx.front(),y=qy.front();
		qx.pop();
		qy.pop();
		if(j<=t){
			bx=b1[j];
			by=b2[j];
		}
		for(int i=0;i<4;i++){
			int nx=x+fx[i][0];
			int ny=y+fx[i][1];
			if(a[nx][ny]!='*'&&nx<=n&&ny<=n&&!v[nx][ny]){
				v[nx][ny]=true;
				a[nx][ny]=a[x][y]+1;
				qx.push(nx);
				qy.push(ny);		
				s++;
			}
		}
	}
	cout<<s;
	return;
}
int main(){
    cin>>n>>t;
    for(int i=1;i<=n;i++){
    	for(int j=1;j<=n;j++){
    		cin>>a[i][j];
    		if(a[i][j]=='A'){
    			ax=i;
    			ay=j;
			}else if(a[i][j]=='B'){
				bx=i;
				by=j;
			}
		}
	}
	for(int i=1;i<=t;i++){
		cin>>b1[i]>>b2[i];
	}
    f();	
    return 0;
}
2023/7/5 16:54
加载中...