社区讨论

中国题UKE???

P10234[yLCPC2024] B. 找机厅参与者 1已保存回复 0

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
0 条
当前快照
1 份
快照标识符
@m5uupcua
此快照首次捕获于
2025/01/13 17:37
去年
此快照最后确认于
2025/01/13 21:43
去年
查看原帖

P10234 [yLCPC2024] B. 找机厅

疯了

CPP
#include <bits/stdc++.h>
using namespace std;
int aaaaaa[1000][1000], n, m, t;



int xxx[4][2] = {{1, 0}, {-1, 0}, {0, 1}, {0, -1}};
int bbb[1000][1000];

struct weiyi {
	int x, y;
};
queue<weiyi>q;

void bfs() {

	while (!q.empty()) {
		int ux = q.front().x, uy = q.front().y;
		q.pop();
		for (int i = 0; i < 4; i++) {
			int d = bbb[ux][uy];
			int vx = ux + xxx[i][0], vy = uy + xxx[i][1];
			if (!vx || !vy || vx > n || vy > m || bbb[vx][vy] >= 0 || aaaaaa[ux][uy] == aaaaaa[vx][vy]) {

			} else {

				bbb[vx][vy] = d + 1;
				q.push({vx, vy});
			}
		}
	}
}

void dfs(int x, int y) {
	if (x == 1 && y == 1) {
		return ;
	} else if (bbb[x][y] == -1) {
		return ;
	} else {
		if (bbb[x - 1][y] == bbb[x][y] - 1) {
			dfs(x - 1, y);
			cout << 'U';
		} else if (bbb[x][y - 1] == bbb[x][y] - 1) {
			dfs(x, y - 1);
			cout << 'R';
		} else if (bbb[x + 1][y] == bbb[x][y] + 1) {
			dfs(x + 1, y);
			cout << 'D';
		} else if (bbb[x][y + 1] == bbb[x][y] + 1) {
			dfs(x, y + 1);
			cout << "L";
		}
	}
}

int main() {
	cin >> t;
	while (t--) {
		memset(bbb, -1, sizeof(bbb));
		cin >> n >> m;
		for (int i = 1; i <= n; i++) {
			for (int j = 1; j <= m; j++) {
				char c;
				cin >> c;
				aaaaaa[i][j] = c == '1';
			}
		}
		q.push({1, 1});
		bbb[1][1] =  0;
		bfs();
		cout << bbb[n][m] << '\n';
		if (bbb[n][m] != -1) {
			dfs(n, m);
		}
	}
	return 0;
}
/*5
5
01011
10100
11010
01001
10110
*/

回复

0 条回复,欢迎继续交流。

正在加载回复...