求助22分
查看原帖
求助22分
91182
山道青冥楼主2024/2/28 22:30

//为什么我和样例输出的一模一样但是我的数据点却是错的?

#include <iostream>
#include <stdio.h>
#include <cstring>
#define dx1 cha[1].x+dx[cha[1].dir]
#define dx2 cha[2].x+dx[cha[2].dir]
#define dy1 cha[1].y+dy[cha[1].dir]
#define dy2 cha[2].y+dy[cha[2].dir]
using namespace std;

int dy[5] = {0, 0, 1, 0, -1};
int dx[5] = {0, -1, 0, 1, 0};
bool pd[5000000];
long long tezheng = 0;
struct abc {
	int x, y, dir = 1;
} cha[5];

int map[15][15];
int tim = 0;
char x;

int main() {
	for (int i = 1; i <= 10 ; i++) {
		for (int j = 1; j <= 11; j++) {
			x = getchar();
			if (x == '*')
				map[i][j] = 1;
			if (x == 'F') {
				cha[1].x = i, cha[1].y = j;
			}
			if (x == 'C') {
				cha[2].x = i, cha[2].y = j;
			}
		}
	}
	int sx1 = cha[1].x, sx2 = cha[2].x, sy1 = cha[1].y, sy2 = cha[2].y;
	while (1) {
		tim++;
		if (map[dx1][dy1] || dx1 > 10 || dx1 < 1 || dy1 > 10 || dy1 < 1) {
			cha[1].dir += 1;
			if (cha[1].dir == 5)
				cha[1].dir = 1;
		} else if (!map[dx1][dy1]) {
			cha[1].x += dx[cha[1].dir];
			cha[1].y += dy[cha[1].dir];
		}
		if (map[dx2][dy2] || dx2 > 10 || dx2 < 1 || dy2 > 10 || dy2 < 1) {
			cha[2].dir += 1;
			if (cha[2].dir == 5)
				cha[2].dir = 1;
		} else if (!map[dx2][dy2]) {
			cha[2].x += dx[cha[2].dir];
			cha[2].y += dy[cha[2].dir];
		}
		tezheng = cha[1].x + cha[1].y * 10 + cha[2].x * 100 + cha[2].y * 1000 + cha[1].dir * 10000 + cha[2].dir * 40000;

		if (!pd[tezheng])
			pd[tezheng] = 1;
		else if (pd[tezheng]) {
			cout << "0";
			return 0;
		}
		if (cha[2].x == cha[1].x && cha[2].y == cha[1].y) {
			cout << tim;
			return 0;
		}

	}
}
2024/2/28 22:30
加载中...