問題描述
目前在乙個很大的平面房間裡有 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 45using
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 個路由器之間...