首屆CCF真題4 無線網路

2022-08-13 10:39:11 字數 1936 閱讀 2167

問題描述

目前在乙個很大的平面房間裡有 n 個無線路由器,每個無線路由器都 固定在某個點上。任何兩個無線路由器只要距離不超過 r 就能互相建立網 絡連線。

除此以外,另有 m 個可以擺放無線路由器的位置。你可以在這些位置 中選擇至多 k 個增設新的路由器。

你的目標是使得第 1 個路由器和第 2 個路由器之間的網路連線經過盡 量少的中轉路由器。請問在最優方案下中轉路由器的最少個數是多少?

輸入格式

第一行包含四個正整數 n,m,k,r。(2 ≤ n ≤ 100,1 ≤ k ≤ m ≤ 100, 1 ≤ r ≤ 108)。

接下來 n 行,每行包含兩個整數 xi 和 yi,表示乙個已經放置好的無線 路由器在 (xi, yi) 點處。輸入資料保證第 1 和第 2 個路由器在僅有這 n 個 路由器的情況下已經可以互相連線(經過一系列的中轉路由器)。

接下來 m 行,每行包含兩個整數 xi 和 yi,表示 (xi, yi) 點處可以增設 乙個路由器。

輸入中所有的座標的絕對值不超過 108,保證輸入中的座標各不相同。

輸出格式

輸出只有乙個數,即在指定的位置中增設 k 個路由器後,從第 1 個路 由器到第 2 個路由器最少經過的中轉路由器的個數。

輸入樣例

輸出樣例

2 **寫的又臭又長,好像引數選項k根本沒有用。

採用計算機網路裡的洪氾式思想,新增完乙個節點(設為第一層)便新增所有和它相連的節點(設為第二層),新增第二層所有節點相連節點(設為第三層),若新增到t則層數必為最小。

有什麼不對請指正

1 #include 2 #include 3 #include 4

5using

namespace

std;67

class node

1617

int getx() const

2021

int gety() const

2425

void settype(int

type)

2829

int gettype() const

3233

void addnode(node *node)

3437

38bool isequal(node *n) //判斷是否是同乙個節點

3942

43 vector* getv() //返回存放相連節點位址的向量位址

4447

};48

49bool isreachable(node &n1,node &n2,int distance) //判斷兩個節點是否可以相連

5055

56int

main()

7475}76

}77 node *s = original[0]; //確定開始節點

78 node *t = original[1]; //確定到達節點

79for(int i=0;i//同上乙個迴圈,新增可選節點

8091}92

}93 network.push_back(s); //新增開始節點

94bool control = true; //設定外迴圈控制變數

95for(int it=0,netsize=1;it//it是網路向量裡的下標,netsize是會改變的網路向量大小,直接用.size()總會報錯 = =

96107

}108

if(!flag) //若不存在於network中則新增

109118

}119

}120

}121 cout122return0;

123 }

CCF 無線網路

試題名稱 無線網路 時間限制 1.0s 記憶體限制 256.0mb 問題描述 問題描述 目前在乙個很大的平面房間裡有 n 個無線路由器,每個無線路由器都固定在某個點上。任何兩個無線路由器只要距離不超過 r 就能互相建立網路連線。除此以外,另有 m 個可以擺放無線路由器的位置。你可以在這些位置中選擇至...

CCF 無線網路

問題描述 目前在乙個很大的平面房間裡有 n 個無線路由器,每個無線路由器都固定在某個點上。任何兩個無線路由器只要距離不超過 r 就能互相建立網路連線。除此以外,另有 m 個可以擺放無線路由器的位置。你可以在這些位置中選擇至多 k 個增設新的路由器。你的目標是使得第 1 個路由器和第 2 個路由器之間...

CCF試題 無線網路

問題描述 目前在乙個很大的平面房間裡有 n 個無線路由器,每個無線路由器都固定在某個點上。任何兩個無線路由器只要距離不超過 r 就能互相建立網路連線。除此以外,另有 m 個可以擺放無線路由器的位置。你可以在這些位置中選擇至多 k 個增設新的路由器。你的目標是使得第 1 個路由器和第 2 個路由器之間...