貪心演算法的基本思路是從問題的某乙個初始解出發一步一步地進行,根據某個優化測度,每一步都要確保能獲得區域性最優解。
1 最小生成樹問題
題目概述給定乙個有n
nn個點m
mm條邊的無向圖,圖中可能存在重邊和自環,邊權可能為負數。求最小生成樹的樹邊權重之和。
輸入格式第一行輸入兩個整數n
nn和mmm;
接下來m
mm行,每行包含三個整數u
uu,v
vv,w
ww,表示點u
uu和點v
vv之間存在一條權值為w
ww的邊。
輸出格式
在一行中輸出最小生成樹的樹邊權重之和。若最小生成樹不存在,則輸出non-existent。
輸入樣例解決方法4 445
550001
111110
002222
220003
333331
112222
222223
334
44輸出樣例
6
66
prim演算法
定義集合vne
w,en
ew
v_,e_
vnew,
enew
表示頂點集與邊集,初始化vne
w=,e
new=
∅v_=\,e_=\varnothing
vnew=
,ene
w=∅
,其中v
vv為任意乙個頂點。在邊集e
ee中尋找權值最小的邊
v>
< u,v>
v>
,滿足條件u
uu是頂點集vne
wv_
vnew
中的元素,而v
vv不是頂點集vne
wv_
vnew
中的元素。重複上述步驟n−1
n-1n−
1次。時間複雜度:o(n
logn
)o(nlog n)
o(nlog
n)
const
int maxn =
100;
const
int inf =
1<<30;
intprim
(int n,
int g[
][maxn]
) selected[0]
=true
;int num =
0, ans =
0, v =0;
while
(num < n -1)
}}for(
int i =
0; i < n; i++)}
selected[v]
=true
; ans +
= min;
num++;}
return ans;
}
kruskal演算法
定義集合vne
w,en
ew
v_,e_
vnew,
enew
表示頂點集與邊集,初始化vne
w=v,
enew
=∅
v_=v,e_=\varnothing
vnew=
v,en
ew=
∅,將邊集e
ee中的元素按照遞增排序,若e
ee與ene
we_
enew
中的邊不構成環,則將e
ee加入ene
we_
enew
。重複上述步驟n−1
n-1n−
1次。時間複雜度:o(n
logn
)o(nlog n)
o(nlog
n)
const
int maxn =
1000
;struct edge
;edge e[maxn]
;int
find_root
(int x,
int parent)
return x_root;
}bool
union_vertices
(int x,
int y,
int parent,
int rank)
else
else
if(rank[y_root]
> rank[x_root]
)else
issuccess =
true;}
return issuccess;
}bool
cmp(edge a,edge b)
intkruskal
(int n,
int m, edge e)
while
(num < n -1)
}}return ans;
}
2 最短路徑問題解決方法
dijskra演算法
時間複雜度:o(n
2)
o(n^2)
o(n2
)
void
dijskra
(int s,
int n,
int g[
][maxn]
,int dist)
visited[s]
=true
; dist[s]=0
;int num =
0, ans =
0, v =0;
while
(num < n -1)
}}for(
int i =
0; i < n; i++)}
visited[v]
=true
; num++;}
}
演算法 動態規劃演算法
動態規劃法基本思想 將原問題分解為相似的子問題,在求解的過程中通過子問題的解求出原問題的解。著名的應用例項有 求解最短路徑問題,揹包問題,專案管理,網路流優化等。個人對動態規劃的理解,主要就是避免重複計算。就是那些曾經發生過的事情,曾經計算過的值先儲存下來,然後再次遇到相同的子問題的時候,直接用儲存...
演算法 動態規劃演算法
動態規劃法基本思想 將原問題分解為相似的子問題,在求解的過程中通過子問題的解求出原問題的解。著名的應用例項有 求解最短路徑問題,揹包問題,專案管理,網路流優化等。個人對動態規劃的理解,主要就是避免重複計算。就是那些曾經發生過的事情,曾經計算過的值先儲存下來,然後再次遇到相同的子問題的時候,直接用儲存...
演算法 動態規劃演算法
背 包問題 有乙個揹包,容量為 4磅 現有如下物品 物品 重量 吉他 g 1 1500 音響 s 4 3000 電腦 l 3 2000 1 要求達到的目標為裝入的揹包的總價值最大,並且重量不超出 2 要求裝入的物品不能重複 動態規劃的核心思想是把原來的問題分解成子問題進行求解,也就是分治的思想。但是...