C 實現網路尋路

2021-09-25 17:03:12 字數 1733 閱讀 5430

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

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

如圖1所示的網路。

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)。

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

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

例如:

使用者輸入:

3 31 2

2 31 3

則程式應該輸出:

6再例如:

使用者輸入:

4 41 2

2 33 1

1 4則程式應該輸出:

10資源約定:

峰值記憶體消耗 < 64m

cpu消耗 < 1000ms

請嚴格按要求輸出,不要畫蛇添足地列印類似:「請您輸入…」 的多餘內容。

所有**放在同乙個原始檔中,除錯通過後,拷貝提交該原始碼。

注意: main函式需要返回0

注意: 只使用ansi c/ansi c++ 標準,不要呼叫依賴於編譯環境或作業系統的特殊函式。

注意: 所有依賴的函式必須明確地在原始檔中 #include , 不能通過工程設定而省略常用標頭檔案。

提交時,注意選擇所期望的編譯器型別(千萬不要混淆c和cpp)。

錦囊

[題意]

給你乙個圖,n個節點,m條無向邊.

問你從任意節點走3步後,到達另外乙個節點的走法數有多少種(開始位置和結束位置可能相同,也就是走三元環)

[解析]

走3步,也就是走了三條邊.

那麼我們可以列舉三條邊的中間那條邊為edge(u,v).

那麼: (節點u連出去的邊數-1)(節點v連出去的邊數-1); 就是第二步走中轉邊edge(u,v)的方法數.

所以只要列舉每條邊作為中轉邊的方法數之和為ans即可.

因為邊是雙向的,所以最後答案ans2即為最終結果.

只要想到通過中轉邊來統計,此題就是不難了.

#include #include #include #include #include #include #include #include #include #include using namespace std;

typedef long long ll;

const int n=10005;

struct road road[100005];

int n,m;

ll in[n];

int main()

ll ret=0;

for(i=1;i<=m;i++)

printf("case %d: %i64d\n",++cas,ret);

}return 0;

}

C 實現A 尋路

網上有關a 演算法的文章已經非常豐富了,各種語言各種思路都有,本來我實在不想再寫一篇,但因為最近工作動盪因此專門抽空又看了一下,然後就想寫個文章防止以後印象模糊,好歹看自己寫的東西可以很快回憶起來。如果是初次接觸a 演算法的朋友可以先看看這篇參考文章,我這邊只是做乙個總結,然後先貼上我之前的筆記吧 ...

網路尋路(dfs)

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

網路尋路 深搜

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