普里姆演算法(稠密圖) 克魯斯卡爾演算法(稀疏圖)
1.prime 演算法
貪心 集合加點
2. kruskal演算法
並查集 加邊
思想是加 點,在邊比較多的情況下,用prime。
思路:先找 任意一點到其他的點的 最短距離,再找 這個點和剛才的點 到其他的點的最短距離,依次重複
最小生成樹(prime模版)
1 #include2/*hdu hdu 1233 還是暢通工程int grah[100][100];3
int sum=0;4
void pim(intn)5
,d[100];8
for(i=1;i<=n;i++)
9 d[i]=grah[1][i];// 初始
d代表1到i的值
10 v[1]=1;11
for(i=2;i<=n;i++)
12//
找乙個距離最小的點18}
19 sum+=min;
20 v[pos]=1;//
標記已訪問
21for(j=1;j<=n;j++)
2228}29
}3031}
32int
main()
3350
pim(n);
51 printf("
%d\n
",sum);
52 sum=0;53
}54return0;
55 }
最小生成樹(kruskal模版)
view code
1 #include 2 #include3 #include 4
int bin[101
],sum,num;
5struct
node
6p[10000
];11
int cmp(const
void *a,const
void *b)
1215
int find(int
x)16
26return
x;27}28
void merge(int x,int y,int
w)2938}
39int
main()
4052 qsort(p,n*(n-1)/2,sizeof(p[0
]),cmp);
53for(i = 0;i <= n*(n-1)/2-1;i ++)
5458 printf("
%d\n
",sum);59}
60return0;
61 }
ACM寒假集訓第七天 最小生成樹
乙個有 n 個結點的連通圖的生成樹是原圖的極小連通子圖,且包含原圖中的所有 n 個結點,並且有保持圖連通的最少的邊。1 最小生成樹可以用kruskal 克魯斯卡爾 演算法或prim 普里姆 演算法求出。prim在稠密圖中比kruskal優,在稀疏圖中比kruskal劣。kruskal include...
ACM寒假集訓
出自 南昌理工學院acm集訓隊 什麼是dfs?void dfs 狀態 a 1.判斷狀態是否合法。合法繼續執行,否則則回到上次呼叫 2.先下走一層,也就是呼叫dfs a void dfs 引數用來表示狀態 if 越界或者是不合法狀態 return if 特殊狀態 剪枝 return for 擴充套件方...
ACM寒假集訓 6
貪心演算法 又稱貪婪演算法 是指,在對問題求解時,總是做出在當前看來是最好的選擇。貪心演算法不是對所有問題都能得到整體最優解,關鍵是貪心策略的選擇,也就是說,不從整體最優上加以考慮,演算法得到的是在某種意義上的區域性最優解。貪心演算法一般按如下步驟進行 建立數學模型來描述問題。把求解的問題分成若干個...