MnZn 求助 WA on 11
查看原帖
MnZn 求助 WA on 11
310818
蒟酱厂妹楼主2022/7/9 17:22

01 bfs,但是 WA 了最后一个点

#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<cassert>
#include<deque>
#define siz(x) int((x).size())
#define cauto const auto
#define all(x) (x).begin(),(x).end()
using std::cin;using std::cout;
using loli=long long;
using venti=__int128_t;
using pii=std::pair<int,int>;
constexpr int kN=2001,dx[]={-1,1,0,0},dy[]={0,0,-1,1};
const std::string dc="^v<>";
char c[kN][kN];
int n,m,dis[kN][kN];
pii pre[kN][kN];
std::deque<pii>q;
signed main(){
//	freopen(".in","r",stdin);
//	freopen(".out","w",stdout);
	std::ios::sync_with_stdio(false);cin.tie(nullptr);
	cin>>n>>m;
	memset(dis,0x3f,sizeof dis);
	for(int i=1;i<=n;i++)for(int j=1;j<=m;j++){
		cin>>c[i][j];
		if(c[i][j]=='o'){
			dis[i][j]=0;
			q.emplace_back(i,j);
		}
	}
	while(!q.empty()){
		auto[x,y]=q.front();q.pop_front();
		// cout<<x<<' '<<y<<'\n';
		for(int i=0;i<4;i++){
			int nx=x+dx[i],ny=y+dy[i];
			if(nx<1||ny<1||nx>n||ny>m)continue;
			// cout<<"try "<<nx<<' '<<ny<<'\n';
			int w=(c[x][y]!=dc[i]&&dc.find(c[i])!=dc.npos&&c[x][y]!='o');
			if(dis[nx][ny]>dis[x][y]+w){
				dis[nx][ny]=dis[x][y]+w;
				pre[nx][ny]={x,y};
				if(c[nx][ny]=='x'){
					cout<<dis[nx][ny]<<'\n';
					for(;pre[nx][ny]!=pii(0,0);){
						auto[px,py]=pre[nx][ny];
						if(px-1==nx&&(dc.find(c[px][py])!=dc.npos||c[px][py]=='.'))c[px][py]='^';
						if(px+1==nx&&(dc.find(c[px][py])!=dc.npos||c[px][py]=='.'))c[px][py]='v';
						if(py-1==ny&&(dc.find(c[px][py])!=dc.npos||c[px][py]=='.'))c[px][py]='<';
						if(py+1==ny&&(dc.find(c[px][py])!=dc.npos||c[px][py]=='.'))c[px][py]='>';
						nx=px,ny=py;
					}
					goto print;
				}
				if(w)q.emplace_back(nx,ny);
				else q.emplace_front(nx,ny);
			}
		}
	}
	print:
	for(int i=1;i<=n;i++,cout<<'\n')for(int j=1;j<=m;j++)cout<<c[i][j];
	// for(int i=1;i<=n;i++,cout<<'\n')for(int j=1;j<=m;j++)cout<<dis[i][j]<<' ';
	// for(int i=1;i<=n;i++,cout<<'\n')for(int j=1;j<=m;j++)cout<<'('<<pre[i][j].first<<','<<pre[i][j].second<<')'<<' ';
	return 0;
}
2022/7/9 17:22
加载中...