一条直线上N个线段所覆盖的总长度
轉(zhuǎn)自http://blog.csdn.net/bxyill/article/details/8962832
問題描述:
現(xiàn)有一直線,從原點(diǎn)到無窮大。
這條直線上有N個(gè)線段。線段可能相交。
問,N個(gè)線段總共覆蓋了多長?(重復(fù)覆蓋的地區(qū)只計(jì)算一次)
================================================
解題思路:
可以將每個(gè)線段拆分成“單位1”
遍歷所有線段,使用一個(gè)數(shù)組記錄每個(gè)線段所走過的“單位1”
最后統(tǒng)計(jì)數(shù)組中被走過的中“單位1”的個(gè)數(shù),即是所有線段覆蓋的總長度了。
這里有個(gè)問題?數(shù)組的大小如何確定?
數(shù)組的大小應(yīng)該是所有線段中最大的端點(diǎn)坐標(biāo)。
?===============================================
順便想到一個(gè)問題。
給出若干個(gè)線段。求一共有幾個(gè)“連通域”。就是將能合并的線段 合并成一個(gè)線段。
最后能合并出幾個(gè)來?
利用上面的思想。非常簡單。
只需遍歷單位數(shù)組的時(shí)候做個(gè)開始和結(jié)尾的記錄就行了。
程序?qū)崿F(xiàn)如下。
===============================================
//此題要求 //求出一條直線上所有線段所覆蓋的全程長度是多少。 //重疊的地方只計(jì)算一次。 //================================ //本算法的思想是,將每個(gè)線段進(jìn)行像素化, //添加到一個(gè)單位數(shù)組c[N]中 //遍歷c數(shù)組判斷哪些單位被覆蓋到了, //在count計(jì)數(shù)一下就知道一共覆蓋了多少路程。 //真是巧妙啊。 //============================== #include <iostream> using namespace std; const int N = 10000; //線段結(jié)構(gòu)體 struct Segment {int start;int end; }; // int coverage(Segment *segments, int n) {bool c[N]={false};//每個(gè)“單位1”是否被覆蓋到int start=0;int end = 0;//遍歷n個(gè)線段for(int i = 0; i < n; i++){for(int j = segments[i].start; j < segments[i].end; j++){c[j] = true;}//尋找最右端if(segments[i].end > end){end = segments[i].end;}//尋找最左端if(segments[i].start < start){start = segments[i].start;}}//從最左端開始到最右端。遍歷單位數(shù)組Cint count = 0;for(int i= start; i < end; i++){if(c[i]){int s=i;while(c[i]){count++;i++;}int e=i;cout << "["<<s<<","<<e<<"]"<<endl;}}return count; };int main() {Segment s1;s1.start = 1;s1.end = 3;Segment s2;s2.start = 2;s2.end = 6;Segment s3;s3.start = 11;s3.end = 12;Segment s4;s4.start = 10;s4.end = 13;Segment ss[] = {s1,s2,s3,s4};cout << "歸并后"<<endl;cout <<"被覆蓋總長度:" <<coverage(ss, sizeof(ss)/sizeof(ss[0]))<<endl; }
?
輸出結(jié)果如下:
歸并后
[1,6]
[10,13]
被覆蓋總長度
8
請按任意鍵繼續(xù). . .
轉(zhuǎn)載于:https://www.cnblogs.com/bethunebtj/articles/4884893.html
總結(jié)
以上是生活随笔為你收集整理的一条直线上N个线段所覆盖的总长度的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 《闺怨词三首》第二句是什么
- 下一篇: 细数技术指标-[转载]