[ABC387D] Snaky Walk玄关求条
  • 板块学术版
  • 楼主Winalways
  • 当前回复0
  • 已保存回复0
  • 发布时间2025/1/17 22:21
  • 上次更新2025/1/18 10:52:12
查看原帖
[ABC387D] Snaky Walk玄关求条
1011587
Winalways楼主2025/1/17 22:21
#include <bits/stdc++.h>
using namespace std;
int h,w,n;
char s[1005][1005];
int dx[4]={0,0,-1,1},dy[4]={-1,1,0,0};
int vis[1005][1005][2];
struct State{
	int x,y,step,st;
};

int bfs2(int sx,int sy,int ex,int ey){
	queue<State> q;
	q.push({sx,sy,0,0});
	vis[sx][sy][0]=1;
	while(!q.empty()){
		int nowx=q.front().x,nowy=q.front().y;
		int step=q.front().step,st=q.front().st;
		if(nowx==ex&&nowy==ey) return q.front().step;
		if(st==1){
			for(int i=0;i<2;i++){
				int nextx=nowx+dx[i];
				int nexty=nowy+dy[i];
				if(nextx<0||nextx>=h||nexty<0||nexty>=w||vis[nextx][nexty][0]==1||s[nextx][nexty]=='#') continue;
				q.push({nextx,nexty,step+1,0});
				vis[nextx][nexty][0]=1;
			}
		}
		else {
			for(int i=2;i<4;i++){
				int nextx=nowx+dx[i];
				int nexty=nowy+dy[i];
				if(nextx<0||nextx>=h||nexty<0||nexty>=w||vis[nextx][nexty][1]==1||s[nextx][nexty]=='#') continue;
				q.push({nextx,nexty,step+1,1});
				vis[nextx][nexty][1]=1;
			}
		}
		q.pop();
	}
	return -1;
}

int main(){
	cin>>h>>w;
	int sx,sy,ex,ey;
	for(int i=0;i<h;i++){
		for(int j=0;j<w;j++){
			cin>>s[i][j];
			if(s[i][j]=='S'){
				sx=i,sy=j;
			}
			if(s[i][j]=='G') ex=i,ey=j;
		}
	}
	cout<<bfs2(sx,sy,ex,ey);
	
	return 0;
}

样例3过不去

2025/1/17 22:21
加载中...