算法第二次作业skyline

问题内容

数据结构与算法实验题 2.4 条形图轮廓问题
★实验任务
在 x 轴上水平放置着 n个条形图。条形图的轮廓是消去这 n 个条形图的隐藏线后得到的图形,如图所示。
每个条形图由 3元组(Li,Hi,Ri)表示。其中,Li 和 Ri分别为条形图左右竖线的 x 坐标值,Hi 为条形图的高度。例如,上图的 8个条形图表示为:(1,11,5),(2,6,7),(3,13,9),(12,7,16),(14,3,25),(19,18,22),(23,13,29),(24,4,28)。条形图的轮廓可用轮廓向量(V1,V2,…,Vm)表示。当 i 为奇数时,Vi 表示条形图轮廓中一条竖线的 x 坐标值:当i 为偶数时,Vi 表示条形图轮廓中一条横线的高度。
例如,上图的条形图轮廓向量为(1,11,3,13,9,0,12,7,16,3,19,18,22,3,23,13,29,0)。
现在,对于给点的 n个条形图,计算其条形图轮廓。
★数据输入
第一行一个正整数 n,表示 n 个条形图(1 <= n <= 4000)。
接下来 n 行,每行有 3 个整数(Li,Hi,Ri),Li 和 Ri 分别为条形图左右竖线的 x 坐标值,Hi 为条形图的高度(-3000 <= Li,Ri<= 3000, 1 <= Hi <= 1000)。
★数据输出
输出计算出的条形图轮廓向量。

我的代码

#include<iostream>
using namespace std;
int main(){
	int n,height[6010],l,h,r,j,s;
	cin>>n;
	for(j=0;j<6010;j++)
	height[j]=0;
	for(int i=0;i<n;i++){
		cin>>l>>h>>r;
		l+=3000;
		r+=3000;
		s=r;
		for(int i=l;i<r;i++){
			if(h>height[i])
			height[i]=h;
		}
	}
	for(int i=0;i<6010;i++){
		if(height[i]!=height[i+1])
		cout<<i-2999<<" "<<height[i+1]<<" ";
	}
	return 0;
} 
posted @ 2020-09-13 23:08  欣九XJ  阅读(161)  评论(0编辑  收藏  举报