(演算法)判斷兩個區間是否重疊
阿新 • • 發佈:2018-12-30
題目:
判斷兩個區間是否重疊
思路:
假設區間表示為[start,end],先存在兩個區間A,B.
兩個區間的關係有兩種:重疊與不重疊
重疊的情況有4種,兩種相交,兩種包含(很容易想到,此處不示意)
不重疊有兩種情況:A在B前面,A在B後面
因此很容易得到判斷區間重疊的方法:
1、正向判斷,列出四種重疊的情況,滿足其一,則重疊;
2、逆向判斷,列出兩種不重疊的情況,如果滿足其一,則重疊;
顯然第二種方法更簡單。
優化正向判斷:
考慮一下正向判斷的四種情況,其實只要滿足max(A.start,B.start)<=min(A.end,B,end),即可判斷A,B重疊。(由於畫圖比較麻煩,這裡就不示意,可以在紙上試試)
程式碼:
#include <iostream> using namespace std; typedef struct{ int start; int end; }Interval; bool isOverlap_1(Interval interval1,Interval interval2){ if(interval1.end<interval2.start || interval1.start>interval2.end) return false; return true; } bool isOverlap_2(Interval interval1,Interval interval2){ if(max(interval1.start,interval2.start)<=min(interval1.end,interval2.end)) return true; return false; } int main() { Interval interval1,interval2; while(1){ if(cin>>interval1.start && cin>>interval1.end && cin>>interval2.start && cin>>interval2.end){ if(isOverlap_2(interval1,interval2)) cout<<"Overlap"<<endl; else cout<<"Non-overlap"<<endl; } } return 0; }