D题 求调
  • 板块学术版
  • 楼主yyycj
  • 当前回复0
  • 已保存回复0
  • 发布时间2025/1/4 21:47
  • 上次更新2025/1/5 10:26:02
查看原帖
D题 求调
1201331
yyycj楼主2025/1/4 21:47

AC x41
WA x16

#include<map>
#include<set>
#include<list>
#include<stack>
#include<queue>
#include<cmath>
#include<vector>
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#include<unordered_map>
#include<unordered_set>
using namespace std;

#define endl '\n'
typedef long long ll;
const int N = 1e3 + 10;
typedef unsigned int ui;
typedef pair<ll,ll> pll;
typedef pair<int,int> pii;
const double PI = acos(-1.0);
typedef unsigned long long ull;
void print(int x){if(x<0){putchar('-');x=-x;}if(x>9){print(x/10);}putchar(char(x%10+'0'));}
inline int read() {int f=1,sum=0;char ch=getchar();while(!isdigit(ch)){if(ch=='-')f=-1;ch=getchar();}while(isdigit(ch)){sum=(sum<<1)+(sum<<3)+(ch^48);ch=getchar();}return sum*f;}
// ----------------------------
struct node {
	int x,y,dir,step;
};
// ----------------------------
queue<node> q;
bool st[N][N];
char matrix[N][N];
int dx[5] = {-1,0,0,1};
int dy[5] = {0,-1,1,0};
// ----------------------------


int main() {
	int h,w;
	cin>>h>>w;
	for (int i=1;i<=h;i++) {
		for (int j=1;j<=w;j++) {
			cin>>matrix[i][j];
			if (matrix[i][j] == 'S') {
				st[i][j] = true;
				q.push({i,j,0,0});
			}
		}
	}
	// ------------------------
	while (!q.empty()) {
		node u = q.front();
		q.pop();
		for (int i=0;i<4;i++) {
			int nx = u.x + dx[i];
			int ny = u.y + dy[i];
			if (nx>0 && nx<=h && ny>0 && ny<=w && !st[nx][ny] && matrix[nx][ny]!='#' && (dx[i]==0 && u.dir!=2 || dx[i]!=0 && u.dir!=1)) {
				st[nx][ny] = true;
				q.push({nx,ny,(dx[i]==0 ? 2 : 1),u.step+1});
				if (matrix[nx][ny] == 'G') {
					cout<<u.step+1;
					return 0;
				}
			}
		}
	}
	// ------------------------
	cout<<-1;
	return 0;
}
2025/1/4 21:47
加载中...