日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

一条直线上N个线段所覆盖的总长度

發布時間:2023/11/27 生活经验 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 一条直线上N个线段所覆盖的总长度 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

轉自http://blog.csdn.net/bxyill/article/details/8962832

問題描述:

現有一直線,從原點到無窮大。

這條直線上有N個線段。線段可能相交。

問,N個線段總共覆蓋了多長?(重復覆蓋的地區只計算一次)

================================================

解題思路:

可以將每個線段拆分成“單位1”

遍歷所有線段,使用一個數組記錄每個線段所走過的“單位1”

最后統計數組中被走過的中“單位1”的個數,即是所有線段覆蓋的總長度了。

這里有個問題?數組的大小如何確定?

數組的大小應該是所有線段中最大的端點坐標。

?===============================================

順便想到一個問題。

給出若干個線段。求一共有幾個“連通域”。就是將能合并的線段 合并成一個線段。

最后能合并出幾個來?

利用上面的思想。非常簡單。

只需遍歷單位數組的時候做個開始和結尾的記錄就行了。

程序實現如下。

===============================================

//此題要求
//求出一條直線上所有線段所覆蓋的全程長度是多少。
//重疊的地方只計算一次。
//================================
//本算法的思想是,將每個線段進行像素化,
//添加到一個單位數組c[N]中
//遍歷c數組判斷哪些單位被覆蓋到了,
//在count計數一下就知道一共覆蓋了多少路程。
//真是巧妙啊。
//==============================
#include <iostream>
using namespace std;
const int N = 10000;
//線段結構體
struct Segment
{int start;int end;
};
//
int coverage(Segment *segments, int n)
{bool c[N]={false};//每個“單位1”是否被覆蓋到int start=0;int end = 0;//遍歷n個線段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;}}//從最左端開始到最右端。遍歷單位數組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;
}

?

輸出結果如下:

歸并后
[1,6]
[10,13]

被覆蓋總長度
8

請按任意鍵繼續. . .

轉載于:https://www.cnblogs.com/bethunebtj/articles/4884893.html

總結

以上是生活随笔為你收集整理的一条直线上N个线段所覆盖的总长度的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。