90分,错哪了
查看原帖
90分,错哪了
1004142
jinhangdong楼主2024/1/26 15:09
#include<bits/stdc++.h>
using namespace std;
int vis[51][51],v[51][51],ex,ey,fx,fy,n,m;
int dx[4]={1,0,-1,0};
int dy[4]={0,1,0,-1};
char a[51][51];
struct node
{
	int x,y,ans;
};
queue<node>q;
void bfs1()
{
	while(!q.empty())
	{
		node now=q.front();
		q.pop();
		for(int i=0;i<4;++i)
		{
			int nx=now.x+dx[i];
			int ny=now.y+dy[i];
			if(nx>=1&&nx<=n&&ny>=1&&ny<=m&&v[nx][ny]==99999&&a[nx][ny]!='X'&&a[nx][ny]!='D')
			{
				v[nx][ny]=now.ans+1;
				q.push({nx,ny,now.ans+1});
			}
		}
	}
}
void bfs2(int x,int y)
{
	q.push({x,y,0});
	while(!q.empty())
	{	
		node now=q.front();
		q.pop();
		if(now.x==fx&&now.y==fy)
		{
			cout<<now.ans;
			return;
		}
		for(int i=0;i<4;++i)
		{
			int nx=now.x+dx[i];
			int ny=now.y+dy[i];
			if(nx>=1&&nx<=n&&ny>=1&&ny<=m&&!vis[nx][ny]&&a[nx][ny]!='X'&&v[nx][ny]>now.ans)
			{
				vis[nx][ny]=1;
				q.push({nx,ny,now.ans+1});
			}
		}
	}
	cout<<"KAKTUS";
}
int main()
{
	cin>>n>>m;
	for(int i=1;i<=n;++i)
	for(int j=1;j<=m;++j)
	{
		v[i][j]=99999;
		cin>>a[i][j];
		if(a[i][j]=='*')
		{
			v[i][j]=0;
			q.push({i,j,0});
		}
		if(a[i][j]=='S')
		{
			ex=i;
			ey=j;
		}
		if(a[i][j]=='D')
		{
			fx=i;
			fy=j;
		}
	}
	bfs1();
	vis[ex][ey]=1;
	bfs2(ex,ey);
	return 0;
}
2024/1/26 15:09
加载中...