30pt求调
查看原帖
30pt求调
326254
LonginusMonkey楼主2022/9/1 21:15

30pt求调

#include<bits/stdc++.h>
using namespace std;
int arr[110][110];
int beginx, beginy, endx, endy;
int is[110][110][4];
struct node{
	int x, y, z, o;
};
queue<node> que;
int dx[4] = {1,-1,0,0};
int dy[4] = {0,0,1,-1};
int main() {
	int n;
	cin >> n;
	for(int i=1; i<=n; ++i) {
		for(int j=1; j<=n; ++j) {
			char ch;
			cin >> ch;
			if(ch == ' ') {
				j--;
				continue; 
			}
			if(ch == 'A') {
				beginx = i;
				beginy = j;
				arr[beginx][beginy] = 1;
			}
			else if(ch == 'B') {
				endx = i;
				endy = j;
				arr[endx][endy] = 1;
			}
			else if(ch == '.') {
				arr[i][j] = 1; 
			}
			else
			{
				arr[i][j] = 0;
			}
		}
	}
	que.push({beginx, beginy,0,0});
	que.push({beginx, beginy,0,1});
	que.push({beginx, beginy,0,2});
	que.push({beginx, beginy,0,3});
	while(!que.empty()) {
		node t = que.front(); que.pop();
		if(t.x == endx && t.y == endy) {
			cout << t.z;
			return 0;
		}
		if(is[t.x][t.y][t.o]) {
			continue;
		}
		if(arr[t.x][t.y] == 0) {
			continue;
		}
		if(t.x > n || t.x <= 0 || t.y > n || t.y <= 0) {
			continue;
		}
		is[t.x][t.y][t.o] = 1;
		for(int i=0; i<4; ++i) {
			if(t.o == i) {
				que.push({t.x+dx[i], t.y+dy[i], t.z, t.o});
			}
			else
			{
				que.push({t.x+dx[i], t.y+dy[i], t.z+1, i});
			}
		}
	}
	cout << -1;
	return 0;
}
2022/9/1 21:15
加载中...