50分求调
查看原帖
50分求调
884868
封禁用户楼主2024/12/14 09:46
#include<bits/stdc++.h>
using namespace std;
bool ves[55][55];
struct node{
	long long x,y,step;
};
int dx[]={0,0,-1,1};
int dy[]={1,-1,0,0};
queue<node>q1;
long long n,m,x1,yy1,x2,y2,s[55][55],f[55][55];
void f_bfs(){
	while(!q1.empty()){
		node nk=q1.front();
		q1.pop();
		nk.step++;
		for(int i=0;i<4;i++){
			node c=nk;
			c.x+=dx[i],c.y+=dy[i];
			if(c.x>=1&&c.x<=n&&c.y>=1&&c.y<=m&&!ves[c.x][c.y]){
				f[c.x][c.y]=min(f[c.x][c.y],c.step);
				q1.push(c);
				ves[c.x][c.y]=1;
			}
		}
	}
}
void ans_bfs(){
	queue<node>q;
	q.push({x1,yy1,0});
	while(!q.empty()){
		node nk=q.front();
		q.pop();
		if(f[nk.x][nk.y]<=nk.step)
			continue;
		if(nk.x==x2&&nk.y==y2){
			cout<<nk.step;
			return;
		}
		nk.step++;
		for(int i=0;i<4;i++){
			node c=nk;
			c.x+=dx[i],c.y+=dy[i];
			if(c.x>=1&&c.x<=n&&c.y>=1&&c.y<=m&&!ves[c.x][c.y]&&!s[c.x][c.y]){
				q.push(c);
				ves[c.x][c.y]=1;
			}
		}
	}
	cout<<"KAKTUS";
}
int main(){
	cin>>n>>m;
	memset(f,127,sizeof(f));
	for(int i=1;i<=n;i++)
		for(int j=1;j<=m;j++){
			char c;
			cin>>c;
			if(c=='*'){
				f[i][j]=0;
				q1.push({i,j,0});
			}
			else if(c=='D')
				x2=i,y2=j;
			else if(c=='S')
				x1=i,yy1=j;
			if(c=='X')
				s[i][j]=1;
		}
	f_bfs();
	f[x2][y2]=1e8;
	memset(ves,0,sizeof(ves));
	ves[x1][yy1]=1;
	ans_bfs();
	return 0;
}
2024/12/14 09:46
加载中...