時間限制: 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 41 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 ...