D题求调
  • 板块学术版
  • 楼主wzpjk2013
  • 当前回复4
  • 已保存回复4
  • 发布时间2025/1/6 21:12
  • 上次更新2025/1/7 18:05:49
查看原帖
D题求调
930371
wzpjk2013楼主2025/1/6 21:12
#include<bits/stdc++.h> 
using namespace std;
#define int long long
int n,m;
string s[1005];
int dx[]={-1,1,0,0};
int dy[]={0,0,-1,1};
int vis[1005][1005];
struct point{
	int x,y,step,last;
};
queue<point>q;

int bfs(int sx,int sy){
	vis[sx][sy]=1;
	q.push({sx,sy,0,2});
	q.push({sx,sy,0,0});
	while(!q.empty()){
		auto po=q.front();
		q.pop();
		int x=po.x;
		int y=po.y;
		int step=po.step;
		int last=po.last;
//		printf("(%d,%d,%d,%d)\n",x,y,step,last);
		if(s[x][y]=='G'){
			return step;
		}
		if(0<=last&&last<=1){
			for(int i=2;i<=3;i++){
				int xx=x+dx[i];
				int yy=y+dy[i];
				if(xx<1||xx>n||yy<1||yy>m) continue;
				if(s[xx][yy]=='#') continue;
				if(vis[xx][yy]>10) continue;
				vis[xx][yy]++;
				q.push({xx,yy,step+1,i});
			}
		}
		else if(2<=last&&last<=3){
			for(int i=0;i<=1;i++){
				int xx=x+dx[i];
				int yy=y+dy[i];
				if(xx<1||xx>n||yy<1||yy>m) continue;
				if(s[xx][yy]=='#') continue;
				if(vis[xx][yy]>10) continue;
				vis[xx][yy]++;
				q.push({xx,yy,step+1,i});
			}
		}
	}
	return -1;
}
signed main(){
	cin>>n>>m;
	int sx,sy;
	for(int i=1;i<=n;i++){
		cin>>s[i];
		s[i]=" "+s[i];
		for(int j=1;j<=m;j++){
			if(s[i][j]=='S'){
				sx=i,sy=j;
			}
		}
	}
	cout<<bfs(sx,sy);
}

Wa了9个点

2025/1/6 21:12
加载中...