201403 4 無線網路

2021-09-27 02:56:54 字數 2491 閱讀 2040

問題描述

目前在乙個很大的平面房間裡有 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 個路由器最少經過的中轉路由器的個數。

樣例輸入

5 3 1 3

0 05 5

0 30 5

3 53 3

4 43 0

樣例輸出

1.dfs超時**

#includeusing namespace std;

typedef long long ll;

#define rep(i,a,b) for(int i=a;iedge[n];

void addedge(int u,int v)

int dis[n][n];

int n,m,k;ll r;

int vis[n];

vectoransvec;

int ans;

void dfs(int now,int tmpnum,int sum)

if(sum>k)return;

ansvec.push_back(now);

vis[now]=1;

for(int i=0;in)else

} vis[now]=0;

ansvec.pop_back();

}int getans()

/*5 3 1 3

0 05 5

0 30 5

3 53 3

4 43 0

5 0 1 3

0 05 5

0 30 5

3 5*/

int main()

rep(i,n,n+m)

for(int i=1;i<=n+m;i++) }

rep(i,0,n+m)

} }rep(k,1,n+1)

} }/*

rep(i,1,n+1)

printf("\n");

} printf("dis[1][2]:%d\n",dis[1][2]);

*/ int ans=getans();

printf("%d\n",ans);

return 0;

}

2.bfs

#includeusing namespace std;

typedef long long ll;

#define rep(i,a,b) for(int i=a;iedge[n];

void addedge(int u,int v)

int n,m,k;ll r;

int vis[n];

int ans;

struct node

};queueq;

int getans()

for(int i=0;in?1:0;

if(!vis[v]&&now.sum+x<=k)

} }}int main()

rep(i,n,n+m)

rep(i,0,n+m)

} }int ans=getans();

printf("%d\n",ans);

return 0;

}

解析: 這道題需要求出從 源點 到 終點 的最短路, 但是只能選擇一部分中繼點。

1. dfs思路:  適合求所有路徑,但是求最短路的時候,會超時,這道題只需要求最短路, 就超時了。

原因我想應該是, 終點的深度較低, 所以深搜的時候,最壞情況下每次都是逐次降低,最後 才是最

短的答案。 所以 複雜度就很高。

2.bfs思路: 只需要按照層級遞增就可以,每次將已經是最短路的結點標記

錯誤:1.初始化。    以後不用節省空間,直接哪個點,就存在相應的下標中

2.vis[i]標記。 這是深搜防止回溯廣搜剪枝的核心,可不能忘。

201403 4 無線網路

測試資料很弱,用廣搜就可以找到最短路。但是貪心演算法應該不能每次都找到最優解。如果可以在超過k個位置中選擇新增路由器實現更短的路徑,那麼貪心的選擇就是最先搜尋到的k個位置。換句話說貪心認為無論在 新增路由器,減少中轉的效果是一樣的。列舉一些簡單情況可以證明這是不合理的。include include...

CCF CSP 201403 4 無線網路

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

CCF 201403 4 無線網路

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