題意:給出乙個n個結點的無向圖以及某個結點k,按照字典序從小到大順序輸出從1到結點k的所有路徑。
思路:如果直接矩陣深搜的話是會超時的,所以我們可以從終點出發,將與終點相連的連通塊儲存起來,這樣dfs深蒐時可以剪枝掉一些到達不了的點。只要解決了這個,dfs就是小問題。
這道題還有點坑的就是輸出格式和它所給的格式不一樣,注意一下。
1 #include2 #include3using
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演算法,這樣就能過了。還有一種就是我們可以先將所有與目標點聯通...