ex3.cpp

来自「上海交通大学本科算法大作业」· C++ 代码 · 共 114 行

CPP
114
字号
#include <fstream>
#include <algorithm>
using namespace std;

struct HC{
	int x1,x2,y;
};

struct VC{
	int x,y1,y2;
};

int main(){
	int i;
	ifstream fin("intersection3.in");
	int HN,VN;
	fin>>HN>>VN;
	
	HC H[100];
	VC V[100];

	for (i=0;i<HN;i++){
		fin>>H[i].x1>>H[i].x2>>H[i].y;
	}

	for (i=0;i<VN;i++){
		fin>>V[i].y1>>V[i].y2>>V[i].x;
	}

	int Q[200];
	int QN=0;
	for ( i=0;i<HN;i++){
		bool flag=true;
		for (int j=0;j<QN;j++){
			if (Q[j]==H[i].x1) flag=false;
		}
		if (flag){
			Q[QN++]=H[i].x1;
		}
		flag=true;
		for ( j=0;j<QN;j++){
			if (Q[j]==H[i].x2) flag=false;
		}
		if (flag){
			Q[QN++]=H[i].x2;
		}
	}

	for (i=0;i<VN;i++){
		bool flag=true;
		for (int j=0;j<QN;j++){
			if (Q[j]==V[i].x){
				if (Q[j]==V[i].x) flag=false;
			}
		}
		if (flag){
			Q[QN++]=V[i].x;
		}
	}

	sort(Q,Q+QN);

	HC S[100];
	bool SAV[100];
	memset(SAV,0,sizeof(SAV));
	int SN=0;

	int resx[100],resy[100],resn=0;

	for (int z=0;z<QN;z++){
		int p=Q[z];
		for (int i=0;i<HN;i++){
			if (H[i].x1==p){
				S[SN].x1=H[i].x1;
				S[SN].x2=H[i].x2;
				S[SN].y=H[i].y;
				SN++;
			}
			for (int j=0;j<VN;j++){
				if (V[j].x==p){
					for (int k=0;k<SN;k++){
						if (!SAV[k]&&S[k].y>=V[j].y1&&S[k].y<=V[j].y2){
							bool dump=false;
							for (int z=0;z<resn;z++){
								if (resx[z]==p&&resy[z]==S[k].y){
									dump=true;
									break;
								}
							}
							if (!dump){
								resx[resn]=p;
								resy[resn++]=S[k].y;
							}
						}
					}
				}
			}
			if (H[i].x2==p){
				for (int j=0;j<SN;j++){
					if (S[j].x1==H[i].x1&&S[j].x2==H[i].x2&&S[j].y==H[i].y){
						SAV[j]=true;
					}
				}
			}
		}
	}

	ofstream fout("intersection3.out");
	fout<<resn<<endl;
	for (i=0;i<resn;i++){
		fout<<resx[i]<<" "<<resy[i]<<endl;
	}
	fout.close();
}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?