求助
  • 板块灌水区
  • 楼主xiaobiru7302_1
  • 当前回复5
  • 已保存回复5
  • 发布时间2023/7/28 17:08
  • 上次更新2023/11/3 07:11:57
查看原帖
求助
975426
xiaobiru7302_1楼主2023/7/28 17:08

P8693 [蓝桥杯 2019 国 AC] 大胖子走迷宫 代码:

//t3
#include<bits/stdc++.h>
using namespace std;
int n,k,mp[400][400][3],ans;
struct node
{
	int x,y,state,time;
	}
;
queue<node> q;
string s;
int vis[400][400];
int check1(int x,int y)
{
	for(int i=x-1;i<=x+1;i++)
		for(int j=y-1;j<=y+1;j++)
			if(!mp[i][j][2]) return 0;
	return 1;
}
int check2(int x,int y)
{
		for(int i=x-2;i<=x+2;i++)
			for(int j=y-2;j<=y+2;j++)
				if(!mp[i][j][2])return 0;
		return 1;
}
void bfs()
{
	int x1[5]={0,1,-1,0,0},y1[5]={0,0,0,1,-1};
	node e;
	e.state=0;e.time=0;
	e.x=3;e.y=3;
	q.push(e);
	vis[3][3]=1;
	do
	{
		node p=q.front();
		q.pop();
		if(p.x==n-2&&p.y==n-2)
		{
			ans=p.time;
			return;
		}
		for(int i=0;i<=4;i++)
		{
			node o;
			int x2=p.x+x1[i],y2=p.y+y1[i];
			o.time=p.time+1;
			o.x=x2;o.y=y2;
			if(o.time<k)o.state=0;
			if(o.time>=k)o.state=1;
			if(o.time>=k*2)o.state=2;
			if(vis[x2][y2]==0&&mp[x2][y2][p.state])
			{
				vis[x2][y2]=1;
				q.push(o);
			}
			?
		}
	}while(!q.empty());
	
}
int main()
{
	cin>>n>>k;
	for(int i=1;i<=n;i++)
	{
		cin>>s;
		for(int i=1;i<=n;i++)
		{
			cin>>s;
			for(int j=1;j<=n;j++)
			{
				if(s[j-1]=='+')mp[i][j][2]=1;
				if(s[j-1]=='*')mp[i][j][2]=0;
			}
		}
		for(int i=2;i<=n-1;i++)
			for(int j=2;j<=n-1;j++)
				mp[i][j][1]=check1(i,j);
		for(int i=3;i<=n-2;i++)
			for(int j=3;j<=n-2;j++)
				mp[i][j][0]=check2(i,j);
		bfs();
		cout<<ans;
	}
}

代码??处寄了(不会),求大佬帮忙补全

2023/7/28 17:08
加载中...