社区讨论

码风优良,玄关求条

AT_abc317_e [ABC317E] Avoid Eye Contact参与者 1已保存回复 0

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
0 条
当前快照
1 份
快照标识符
@m5xuv11y
此快照首次捕获于
2025/01/15 20:05
去年
此快照最后确认于
2025/01/15 21:08
去年
查看原帖
CPP
/***********
AT_abc317_e
作者:Lzy 
***********/

#include<bits/stdc++.h>
#define N 2005

using namespace std;

int n,m,p,q,arr[N][N],u1,v1;
int dx[] = {0,-1,1, 0,0};
int dy[] = {0, 0,0,-1,1};
char a[N][N];

void bfs(int u,int v)
{
	queue<int> qa;
	queue<int> qb;
	queue<int> foot;
	qa.push(u);
	qb.push(v);
	foot.push(0);
	while(!qa.empty())
	{
		int x = qa.front();
		int y = qb.front();
		int t = foot.front();
		qa.pop();
		qb.pop();
		foot.pop();
		if(a[x][y] == 'G')
		{
			cout << t << endl;
			return ;
		}
		t++;
		for(int i = 1;i <= 4;i++)
		{
			int nx = x + dx[i];
			int ny = y + dy[i];
			if(nx >= 1 && nx <= n && ny >= 1 && ny <= m && arr[nx][ny] < 0)
			{
				arr[nx][ny] = t;
				qa.push(nx);
				qb.push(ny);
				foot.push(t);
			}
		}
	}
	cout << -1 << endl;
	return ;
}

int main()
{
	ios :: sync_with_stdio(0);
	cin >> n >> m;
	for(int i = 1;i <= n;i++)
	{
		for(int j = 1;j <= m;j++)
		{
			cin >> a[i][j];
			if(a[i][j] == 'S') p = i,q = j;
		}
	}
	for(int i = 1;i <= n;i++)
	{
		for(int j = 1;j <= m;j++)
		{
			if(a[i][j] == 'v')
			{
				for(int k = i + 1;k <= n && a[k][j] == '.';k++)
				{
					a[k][j] = '#';
				}
			}
			if(a[i][j] == '^')
			{
				for(int k = i - 1;k >= 1 && a[k][j] == '.';k--)
				{
					a[k][j] = '#';
				}
			}
			if(a[i][j] == '>')
			{
				for(int k = j + 1;k <= m && a[i][k] == '.';k++)
				{
					a[i][k] = '#';
				}
			}
			if(a[i][j] == '<')
			{
				for(int k = j - 1;k >= 1 && a[i][k] == '.';k--)
				{
					a[i][k] = '#';
				}
			}
		}
	}
	
//	cout << endl;
//	for(int i = 1;i <= n;i++)
//	{
//		for(int j = 1;j <= m;j++)
//		{
//			cout << a[i][j];
//		}
//		cout << endl;
//	}

	for(int i = 1;i <= n;i++)
	{
		for(int j = 1;j <= m;j++)
		{
			if(a[i][j] == '.' || a[i][j] == 'G')
			{
				arr[i][j] = -1;
			}
		}
	}
	bfs(p,q);
	
//	for(int i = 1;i <= n;i++)
//	{
//		for(int j = 1;j <= m;j++)
//		{
//			printf("%3d",arr[i][j]);
//		}
//		cout << endl;
//	}
	return 0;
}
Wrong Answer on #4.

回复

0 条回复,欢迎继续交流。

正在加载回复...