UVa 208 消防車(dfs 剪枝)

2022-06-20 23:36:12 字數 1144 閱讀 4610

題意:給出乙個n個結點的無向圖以及某個結點k,按照字典序從小到大順序輸出從1到結點k的所有路徑。

思路:如果直接矩陣深搜的話是會超時的,所以我們可以從終點出發,將與終點相連的連通塊儲存起來,這樣dfs深蒐時可以剪枝掉一些到達不了的點。只要解決了這個,dfs就是小問題。

這道題還有點坑的就是輸出格式和它所給的格式不一樣,注意一下。

1 #include2 #include3

using

namespace

std;45

const

int maxn = 22;6

7int

n, step, route;

8int

map[maxn][maxn];

9int

path[maxn];

10int

vis[maxn];

11int

trunk[maxn];

1213

void init(int cur) //

從終點開始遍歷,儲存與終點相連的連通塊

1421}22

23void dfs(int cur, int

step)

2434

for (int i = 0; i < maxn; i++)

3543}44

return;45

}4647int

main()

4862 vis[1] = 1

;63 step = 1

;64 route = 0; //

記錄路徑數量

65 init(n); //

計算儲存連通塊

66 cout << "

case

"<< ++kase << ":"

<67 dfs(1, 1

);68 cout << "

there are

"<< route << "

routes from the firestation to streetcorner

"<< n << "."

<6970}71

return0;

72 }

UVa208 消防車 dfs 並查集

uva208 firetruck 題意 乙個n n 20 個結點的無向圖,要求列印從結點1到結點k的所有路徑。解法 簡單的dfs,但是會超時,因為有些結點不能到達k,所以搜尋這些結點完全是多餘的,可以用並查集將能到達k的結點放入乙個集合,搜尋這些結點就可以了。include include incl...

uva11542 高斯消元

題意 給定一些數字,保證這些數字質因子不會超過500,求這些數字中選出幾個,乘積為完全平方數,問有幾種選法 思路 對每個數字分解成質因子後,發現如果要是完全平方數,選出來的數字的每個質因子個數都必然要是偶數,這樣每個質因子可以列出乙個異或的方程,如果數字包含質因子,就是有這個未知數,然後進行高斯消元...

紫書習題 7 1 UVa 208 (爆搜加剪枝)

題意 構造出一張圖,給出乙個點,字典序輸出所有從1到該點的路徑。解題方法 裸蒐會超時的題目,其實題目的資料特地設計得讓圖稠密但起點和終點卻不相連,所以直接搜尋過去會超時。只要判斷下起點和終點能不能相連就行了,可以用並查集也可以用floyd演算法,這樣就能過了。還有一種就是我們可以先將所有與目標點聯通...