社区讨论

68分求调(其它全WA),玄关

P4667[BalticOI 2011] Switch the Lamp On (Day1)参与者 3已保存回复 2

讨论操作

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

当前回复
2 条
当前快照
1 份
快照标识符
@mhjuszoi
此快照首次捕获于
2025/11/04 08:51
4 个月前
此快照最后确认于
2025/11/04 08:51
4 个月前
查看原帖
68分求调(其它全WA),玄关。
求求了各位大佬……
CPP
#include<iostream>
#include<cstdio>
#include<deque>
#include<cstring>
using namespace std;
struct node
{
	int x,y;
};
const int NR=502;
char a[NR][NR];
int n,m,dis[NR][NR];
int bfs()
{
	deque<node> dq;
	dq.push_front({1,1});
	memset(dis,0x3f,sizeof(dis));
	dis[1][1]=0;
	while(!dq.empty())
	{
		int sx=dq.front().x,sy=dq.front().y;
		if(sx==n+1 && sy==m+1) return dis[sx][sy];
		dq.pop_front();
		if(sx>1 && sy>1 && dis[sx-1][sy-1]>1e9)
		{
			if(a[sx-1][sy-1]=='\\')
			{
				dq.push_front({sx-1,sy-1});
				dis[sx-1][sy-1]=dis[sx][sy];
			}
			else
			{
				dq.push_back({sx-1,sy-1});
				dis[sx-1][sy-1]=dis[sx][sy]+1;
			}
		}
		if(sx>1 && sy<=m && dis[sx-1][sy+1]>1e9)
		{
			if(a[sx-1][sy]=='/')
			{
				dq.push_front({sx-1,sy+1});
				dis[sx-1][sy+1]=dis[sx][sy];
			}
			else
			{
				dq.push_back({sx-1,sy+1});
				dis[sx-1][sy+1]=dis[sx][sy]+1;
			}
		}
		if(sx<=n && sy>1 && dis[sx+1][sy-1]>1e9)
		{
			if(a[sx][sy-1]=='/')
			{
				dq.push_front({sx+1,sy-1});
				dis[sx+1][sy-1]=dis[sx][sy];
			}
			else
			{
				dq.push_back({sx+1,sy-1});
				dis[sx+1][sy-1]=dis[sx][sy]+1;
			}
		}
		if(sx<=n && sy<=m && dis[sx+1][sy+1]>1e9)
		{
			if(a[sx][sy]=='\\')
			{
				dq.push_front({sx+1,sy+1});
				dis[sx+1][sy+1]=dis[sx][sy];
			}
			else
			{
				dq.push_back({sx+1,sy+1});
				dis[sx+1][sy+1]=dis[sx][sy]+1;
			}
		}
	}
	return -1;
}
int main()
{
	std::ios::sync_with_stdio(false);
	std::cin.tie(0);
	std::cout.tie(0);
	cin>>n>>m;
	int i,j;
	for(i=1;i<=n;i++)
		for(j=1;j<=m;j++) cin>>a[i][j];
	int ans=bfs();
	if(ans==-1) cout<<"NO SOLUTION";
	else cout<<ans;
	return 0;
}

回复

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

正在加载回复...