invliad moving是啥意思啊
查看原帖
invliad moving是啥意思啊
94772
Donald_Ducka楼主2024/3/21 21:43
#include <bits/stdc++.h>
using namespace std;

int dx[4] = {1, -1, 0, 0};
int dy[4] = {0, 0, 1, -1};
char mai[4] = {'D', 'U', 'R', 'L'};
const int N = 3e3 + 10;

struct node {
	int x;
	int y;
	int cnt;
};
node q[N * N];
bool vis[N][N];
char way[N][N];
int a[N][N];
int m, n;
int u, last;
void bfs() {
	int head = 0, tail = 1;
	q[head].x = q[head].y = 1;
	vis[1][1] = 1;
	while (head < tail) {
		node now = q[head];
		for (int i = 0; i < 4; i++) {
			int xa = now.x + dx[i], ya = now.y + dy[i];
			//	if (xa < 1 || xa > n || ya < 1 || ya > n)
			//		continue;
			if ( xa >= 1 && xa <= n && ya >= 1 && ya <= m && a[now.x][now.y] != a[xa][ya] && !vis[xa][ya]) {
				way[xa][ya] = mai[i];
				vis[xa][ya] = 1;
				q[tail].x = xa;
				q[tail].y = ya;
				q[tail].cnt = q[head].cnt + 1;
				if (xa == n && ya == m)
					u = q[tail].cnt;
				tail++;
			}
		}
		head++;


	}

}
void prt(int x, int y) {
	if (x == 1 && y == 1)
		return;
	if (way[x][y] == 'R')
		prt(x, y - 1);
	if (way[x][y] == 'L')
		prt(x, y + 1);
	if (way[x][y] == 'U')
		prt(x + 1, y);
	if (way[x][y] == 'D')
		prt(x - 1, y);
	printf("%c", way[x][y]);
}
int main() {
	int T;
	cin >> T;
	while (T--) {
		cin >> n >> m;
		char c;
		for (int i = 0; i <= n; i++) {
			for (int j = 0; j <= m; j++) {
				vis[i][j] = a[i][j] = 0;
			}
		}
		for (int i = 1; i <= n; i++)
			for (int j = 1; j <= m; j++) {
				cin >> c;
				if (c == '1')
					a[i][j] = 1;
			}

		bfs();
		if (!vis[n][m]) {
			cout << "-1" << endl;
		} else {
			cout << u << endl;
			prt(n, m);

		}

	}
}
2024/3/21 21:43
加载中...