基站建設問題

2021-07-25 20:51:50 字數 1518 閱讀 2589

在二維座標中,有n個點,要求在x軸上某點為圓心,d為半徑,能覆蓋這些點,求需要這樣的幾個圓。如果無法完全覆蓋輸出-1

思路:

我們可以逆向思考,如果以二維座標上的點p(x,y)為圓心,d為半徑,則有兩個點經過x軸,那兩個點即為x軸上能覆蓋到p的最近點和最遠點,如圖

在xmin和xmax之間的任意x為圓心肯定都能覆蓋到p點。那問題就轉換成了任意pi的xmin和xmax比較的問題。

(1)判斷這些點y是否在d的範圍內,如果超出肯定不能 完全覆蓋

(2)求出這些點的的xmin和xmax,然後以xmin從小到大進行排序

(3)如果p1.xmax

如果p1.xmax>p2.max,代表兩點能在乙個圓內覆蓋,但是最遠距離 xmax更新了,變成了p2.xmax

就這樣,這題就差不多能夠解決了,接下來不懂的看看的**,仔細想想就能想清楚了。

#include #include #include using namespace std;

#define max 1001

struct tpoint

;struct tseg

;tpoint point[max];

tseg seg[max];

void input(int n);

bool judge(int n,int d);

void vsort(int n);

bool vcmp(const tseg &a,const tseg &b);

int getnum(int n);

void vout(int nc,int out);

int main()

input(nnum); //輸入點

if(judge(nnum,ndis)==true)

else

vout(ncase,ans);//輸出

ncase++;

}return 0;

}void input(int n)

}bool judge(int n,int d)

seg[i].tmin=point[i].x-sqrt(1.0*d*d-1.0*point[i].y*point[i].y);

seg[i].tmax=point[i].x+sqrt(1.0*d*d-1.0*point[i].y*point[i].y);

}return true;

}void vsort(int n)

bool vcmp(const tseg &a,const tseg &b)

}return ret;

}void vout(int nc,int out)

{ cout<

城市公交網建設問題

問題描述 有一張城市地圖,圖中的頂點為城市,無向邊代表兩個城市間的連通關係,邊上的權為在這兩個城市之間修建高速公路的造價,研究後發現,這個地圖有乙個特點,即任一對城市都是連通的。現在的問題是,要修建若干高速公路把所有城市聯絡起來,問如何設計可使得工程的總造價最少?輸入格式 n 城市數,1 n 100...

1348 例4 9 城市公交網建設問題

有一張城市地圖,圖中的頂點為城市,無向邊代表兩個城市間的連通關係,邊上的權為在這兩個城市之間修建高速公路的造價,研究後發現,這個地圖有乙個特點,即任一對城市都是連通的。現在的問題是,要修建若干高速公路把所有城市聯絡起來,問如何設計可使得工程的總造價最少?n 城市數,1 n 100 e 邊數 以下e行...

1348 例4 9 城市公交網建設問題

題目描述 有一張城市地圖,圖中的頂點為城市,無向邊代表兩個城市間的連通關係,邊上的權為在這兩個城市之間修建高速公路的造價,研究後發現,這個地圖有乙個特點,即任一對城市都是連通的。現在的問題是,要修建若干高速公路把所有城市聯絡起來,問如何設計可使得工程的總造價最少?輸入 n 城市數,1 n 100 e...