0分求调(请神犇们在我的代码上调(或者指出我的问题),超时没事)
查看原帖
0分求调(请神犇们在我的代码上调(或者指出我的问题),超时没事)
553255
遇事不决就选C楼主2022/11/2 00:06
#include<bits/stdc++.h>
using namespace std;
int n, m, fx, fy, ex, ey;//me means memory
bool ma[55][55], me[55][55];
char way;
struct ways{
	int x, y;
	char wa;//isn't WA!!
	int cnt, flagl, flagr;
};
void bfs() {
	queue <ways>q;
	q.push({fx, fy, way, 0, 0, 0});
	me[fx][fy] = true;
	while(!q.empty()) {
		ways b = q.front();
		q.pop();
		int nx = b.x, ny = b.y;
		cout << nx << ' ' << ny << ' ' << b.wa << ' ' << b.cnt << endl;
		if (nx == ex && ny == ey) {
			cout << b.cnt;
			exit(0);
		}
		me[nx][ny] = true;
		if (b.wa == 'E') {//mock 'E', because I don't know how to define the ways array;
			bool nflag = true;
			if (ny + 1 <= m && !ma[nx][ny + 1] && !me[nx][ny + 1]) q.push({nx, ny + 1, 'E', b.cnt + 1, 0, 0});
			else nflag = false;
			if (ny + 2 <= m && !ma[nx][ny + 2] && !me[nx][ny + 2] && nflag) q.push({nx, ny + 2, 'E', b.cnt + 1, 0, 0});
			else nflag = false;
			if (ny + 3 <= m && !ma[nx][ny + 3] && !me[nx][ny + 3] && nflag) q.push({nx, ny + 3, 'E', b.cnt + 1, 0, 0});
			if (b.flagl < 3) q.push({nx, ny, 'N', b.cnt + 1, b.flagl + 1, 0});
			if (b.flagr < 3) q.push({nx, ny, 'S', b.cnt + 1, 0, b.flagr + 1});
			continue;
		}else if (b.wa == 'S') {//mock 'S'
			bool nflag = true;
			if (nx + 1 <= n && !ma[nx + 1][ny] && !me[nx + 1][ny]) q.push({nx + 1, ny, 'S', b.cnt + 1, 0, 0});
			else nflag = false;
			if (nx + 2 <= n && !ma[nx + 2][ny] && !me[nx + 2][ny] && nflag) q.push({nx + 2, ny, 'S', b.cnt + 1, 0, 0});
			else nflag = false;
			if (nx + 3 <= n && !ma[nx + 3][ny] && !me[nx + 3][ny] && nflag) q.push({nx + 3, ny, 'S', b.cnt + 1, 0, 0});
			if (b.flagl < 3) q.push({nx, ny, 'E', b.cnt + 1, b.flagl + 1, 0});
			if (b.flagr < 3) q.push({nx, ny, 'W', b.cnt + 1, 0, b.flagr + 1});
			continue;
		}else if (b.wa == 'W') {//mock 'W'
			bool nflag = true;
			if (ny - 1 > 0 && !ma[nx][ny - 1] && !me[nx][ny - 1]) q.push({nx, ny - 1, 'W', b.cnt + 1, 0, 0});
			else nflag = false;
			if (ny - 2 > 0 && !ma[nx][ny - 2] && !me[nx][ny - 2] && nflag) q.push({nx, ny - 2, 'W', b.cnt + 1, 0, 0});
			else nflag = false;
			if (ny - 3 > 0 && !ma[nx][ny - 3] && !me[nx][ny - 3] && nflag) q.push({nx, ny - 3, 'W', b.cnt + 1, 0, 0});
			if (b.flagl < 3) q.push({nx, ny, 'S', b.cnt + 1, b.flagl + 1, 0});
			if (b.flagr < 3) q.push({nx, ny, 'N', b.cnt + 1, 0, b.flagr + 1});
			continue;
		}else if (b.wa == 'N') {//mock 'N'
			bool nflag = true;
			if (nx - 1 > 0 && !ma[nx - 1][ny] && !me[nx - 1][ny]) q.push({nx - 1, ny, 'N', b.cnt + 1, 0, 0});
			else nflag = false;
			if (nx - 2 > 0 && !ma[nx - 2][ny] && !me[nx - 2][ny] && nflag) q.push({nx - 2, ny, 'N', b.cnt + 1, 0, 0});
			else nflag = false;
			if (nx - 3 > 0 && !ma[nx - 3][ny] && !me[nx - 3][ny] && nflag) q.push({nx - 3, ny, 'N', b.cnt + 1, 0, 0});
			if (b.flagl < 3) q.push({nx, ny, 'W', b.cnt + 1, b.flagl + 1, 0});
			if (b.flagr < 3) q.push({nx, ny, 'E', b.cnt + 1, 0, b.flagr + 1});
			continue;
		}
	}
	cout << -1;
	exit(0);
}
int main(){
	cin >> n >> m;
	for (int i = 1, flag; i <= n; i++) {
		for (int j = 1; j <= m; j++) scanf("%d", &ma[i][j]);
	}
	cin >> fx >> fy >> ex >> ey >> way;
	bfs();
	return 0;
}

2022/11/2 00:06
加载中...