样例没过求助qwq
查看原帖
样例没过求助qwq
955954
Miracle_InDream楼主2023/11/11 22:00
#include<bits/stdc++.h>
using namespace std;
int n,m;
int mp[10][10],vis[10][10],dx[4]={1,-1,0,0},dy[4]={0,0,-1,1};
struct node
{
	int x,y,step,blood;
};
queue<node> q;
node s,t;
void bfs()
{
	s.step=1;
	s.blood=6;
	vis[s.x][s.y]=1;
	q.push(s);
	while(!q.empty())
	{
		node tmp=q.front();
		q.pop();
		tmp.blood--;
		if(tmp.blood==0)
		{
			cout<<-1;
			break;
		}
		if(tmp.x==t.x&&tmp.y==t.y)
		{
			cout<<tmp.step;
			break;
		}
		for(int i=0;i<4;i++)
		{
			node a;
			a.x=tmp.x+dx[i];
			a.y=tmp.y+dy[i];
			if(a.x>0&&a.y>0&&a.x<=n&&a.y<=m&&vis[a.x][a.y]==0&&mp[a.x][a.y]!=0)
			{
				q.push(a);
				vis[a.x][a.y]=1;
				a.step=tmp.step+1;
				a.blood=tmp.blood-1;
				if(mp[a.x][a.y]==4)
					a.blood=6;
			}
		}
	}
}
int main()
{
	cin>>n>>m;
	memset(vis,0,sizeof(vis));
	for(int i=1;i<=n;i++)
	{
		for(int j=1;j<=m;j++)
		{
			cin>>mp[i][j]; 
			if(mp[i][j]==2)
			{
				s.x=i;
				s.y=j;
			}
			else if(mp[i][j]==3)
			{
				t.x=i;
				t.y=j;
			}
		}
	}
	bfs();
	return 0;
}
2023/11/11 22:00
加载中...