P3818 小A和uim之大逃离 II求调
  • 板块题目总版
  • 楼主stardusts
  • 当前回复0
  • 已保存回复0
  • 发布时间2024/7/12 10:45
  • 上次更新2024/7/12 11:47:26
查看原帖
P3818 小A和uim之大逃离 II求调
1341733
stardusts楼主2024/7/12 10:45

对了一半(AC 5个,WA 4个,TL 1个)
帮忙把WA的4个改对就行(TL的改对更好)
阿里嘎多

# include <bits/stdc++.h>
using namespace std;
struct stu
{
	int x,y,num;
	short yn; 
};
int n,m,xx[]={0,0,1,-1},yy[]={1,-1,0,0},add_x,add_y;
bool flag[2][1005][1005];
char a[1005][1005];
queue <stu> q;
void bfs()
{
	q.push((stu){1,1,0,0});
	flag[0][1][1]=1;
	while (!q.empty())
	{
		stu p=q.front();
		q.pop();
		if (p.x==n&&p.y==m)
		{
			cout<<p.num;
			return ;
		}
		for (int u=0;u<n;u++)
		{
			int ux=xx[u]+p.x,uy=yy[u]+p.y;
			if (ux>0&&ux<=n&&uy>0&&uy<=m&&a[ux][uy]!='#'&&!flag[p.yn][ux][uy])
			{
				q.push((stu){ux,uy,p.num+1,p.yn});
				flag[p.yn][ux][uy]=1;
			}
		}
		int ux=add_x+p.x,uy=add_y+p.y;
		if (ux>0&&ux<=n&&uy>0&&uy<=m&&a[ux][uy]!='#'&&!flag[1][ux][uy]&&!p.yn)
		{
			q.push((stu){ux,uy,p.num+1,1});
			flag[1][ux][uy]=1;
		}
	}
	cout<<-1;
	return ;
}
int main()
{
	cin>>n>>m>>add_x>>add_y;
	for (int u=1;u<=n;u++)
		for (int v=1;v<=m;v++)
			cin>>a[u][v];
	bfs();
	
	return 0;
}
2024/7/12 10:45
加载中...