藍橋杯 歷屆試題 網路尋路

2022-05-06 02:39:10 字數 1556 閱讀 5954

時間限制: 1sec 記憶體限制: 128mb 提交: 21 解決: 9

題目描述

x  國的乙個網路使用若干條線路連線若干個節點。節點間的通訊是雙向的。某重要資料報,為了安全起見,必須恰好被**兩次到達目的地。該包可能在任意乙個節點產生,我們需要知道該網路中一共有多少種不同的**路徑。 

源位址和目標位址可以相同,但中間節點必須不同。 

如下圖所示的網路。 

1  ->   2  ->   3  ->   1  是允許的 

1  ->   2  ->   1  ->   2  或者  1  ->   2  ->   3  ->   2  都是非法的。 

輸入輸入資料的第一行為兩個整數n  m,分別表示節點個數和連線線路的條數(1< =n< =10000;  0< =m< =100000)。 

接下去有m行,每行為兩個整數  u  和  v,表示節點u  和  v  聯通(1< =u,v< =n  ,  u!=v)。 

輸入資料保證任意兩點最多只有一條邊連線,並且沒有自己連自己的邊,即不存在重邊和自環。 

輸出輸出乙個整數,表示滿足要求的路徑條數。

樣例輸入

4  4 

1 2

2 3

3 1

1 4

樣例輸出

10

分析題目要求:

首相明確有兩種目的地,一種是回到原點,一種是到達乙個沒有到過的地方;

路徑中經過的點不能夠有重複的點;

根據題目給出的資料可以發現,1-2-3-4  和 4-3-2-1是兩條不同的路徑。

解體思路:

1.使用vis陣列記錄經過的點;

2.使用dfs尋找可能的路徑,因為路徑的長度是4,那麼當尋找路徑上的前3個點的時候,如果可以從前乙個點走到當前的點,並且當前的點沒有走過,那麼將當前的點設定為路徑當中的點。

3.尋找路徑第四個點的時候,有兩種可能的情況,一種是可以到達的第四個點是之前沒有走過的點,方案數量加一,另外一的情況是可以到達的第四個點是第乙個點(走回到了起點),方案數量加一。

注意事項:

1.使用vector建立乙個鄰接表,如果使用鄰接矩陣,容易時間超限。

#include#include

#include

#include

#define maxn 100100

using

namespace

std;

int n,m,vis[maxn/10

],ans;

typedef

struct

roadroad;

vector

box[maxn/10

];void dfs(int f,int pre,int

cur)}}

if(cur==3

)

} }int main(void

)

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

printf("%d

",ans);

return0;

}

歷屆試題 網路尋路 藍橋杯

問題描述 x 國的乙個網路使用若干條線路連線若干個節點。節點間的通訊是雙向的。某重要資料報,為了安全起見,必須恰好被 兩次到達目的地。該包可能在任意乙個節點產生,我們需要知道該網路中一共有多少種不同的 路徑。源位址和目標位址可以相同,但中間節點必須不同。如下圖所示的網路。1 2 3 1 是允許的 1...

藍橋杯 歷屆試題 網路尋路

歷屆試題 網路尋路 時間限制 1.0s 記憶體限制 256.0mb 問題描述 x 國的乙個網路使用若干條線路連線若干個節點。節點間的通訊是雙向的。某重要資料報,為了安全起見,必須恰好被 兩次到達目的地。該包可能在任意乙個節點產生,我們需要知道該網路中一共有多少種不同的 路徑。源位址和目標位址可以相同...

藍橋杯 歷屆試題 網路尋路

x 國的乙個網路使用若干條線路連線若干個節點。節點間的通訊是雙向的。某重要資料報,為了安全起見,必須恰好被 兩次到達目的地。該包可能在任意乙個節點產生,我們需要知道該網路中一共有多少種不同的 路徑。源位址和目標位址可以相同,但中間節點必須不同。如下圖所示的網路。1 2 3 1 是允許的 1 2 1 ...