各位dalao们,请问这个程序问题出在哪儿?
查看原帖
各位dalao们,请问这个程序问题出在哪儿?
178142
有点文化楼主2020/12/13 10:50
#include <bits/stdc++.h>
using namespace std;
/*struct Node {
};
struct IceHole {
	
};
struct Icemountain {
};
struct q {
};*/
struct Node{
	int x, y, visit[1000001], Dir;
};queue<Node>q;
int main() {
	int Lu_x[4001];
	int Lu_y[4001];
	int Rd_x[4001];
	int Rd_y[4001];
	int Ice_x;
	int Ice_y;
	int N;
	int Hole_x;
	int Hole_y;
	int Startx, Starty, Endx, Endy, Infinite = 1000001;
	cin >> N;
	cin >> Startx >> Starty >> Endx >> Endy;
	for(int i = 1; i <= N; i++) {
		cin >> Lu_x[i] >> Lu_y[i] >> Rd_x[i] >> Rd_y[i];
	}
	//N = Read(), Ice_X = Read(), Ice_Y = Read(), Hole_R = Read(), Hole_Y = Read();
	//for(int i = 1; i <= N; i++) {
	//	Lu_X[i] = Read(), Lu_Y[i] = Read(), RD_X[i] = Read(), RD_Y[i] = Read(); 
	//} Icemountain.
	for(q.push((Node){0, Ice_x, Ice_y, 0}), q.push((Node){1, Ice_x, Ice_y, 0}); !q.empty();) {
		int mx =-Infinite, mi = Infinite, p1 = 0, p2 = 0;
		int Direction = q.front().Dir, Now_x = q.front().x, Now_y = q.front().y, N_shove = q.front().visit[p1<<2];
		q.pop();
		if(Direction) {
			for(int i = 1; i <= N; i++) {
			if(Lu_x[i] <= Now_x && Now_x <= Rd_x[i]) {
				if(Lu_y[i] > Now_y && Lu_y[i] < mi) {
					mi = Lu_y[i], p1 = i;
				}
				if(Rd_y[i] < Now_y && Rd_y[i] > mx) {
					mx = Rd_y[i], p2 = i;
				}
			}                            
		}
		if(p1 && !q.front().visit[p1*4]) {
			q.front().visit[p1*4] = 1, q.push((Node){0, Now_x, mi = 1, N_shove + 1});
		}
		if(p2 && !q.front().visit[p2*4|1]) {
			q.front().visit[p2*4|1] = 1, q.push((Node){0, Now_x, mx + 1, N_shove - 1});
		}
		if(Now_x == Hole_x && mx <= Hole_y && Hole_y <= mi) {
			cout << N_shove + 1;
			}
		}
	}
	return 0;
}
2020/12/13 10:50
加载中...