constructing roads
原題鏈結
題目給出所有路的關係,以及已經被修好的路,求修剩下的路的最小值。
地圖已經給出 直接讀取就好,在讀取已經修好的路的時候,將已經修好的路的權值改為0即可,正常進行計算,
prim:
#include
#include
#include
#include
#include
#include
#include
#include
using
namespace std;
const
int inf =
0x3f3f3f3f
;long
long map[
305]
[305];
long
long dis[
300005];
bool vis[
300005];
long
long ans;
long
long n;
void
prim()
vis[1]
=true
;for
(i =
0; i < n -
1; i++)}
// cout << "***" << endl;
// for (j = 1; j <= n; j++)
//
// cout << endl;
if(minn == inf)
ans +
= minn;
vis[p]
=true
;for
(j =
1; j <= n; j++)}
}return;}
intmain()
}for
(i =
1; i <= n; i++)}
}long
long m;
scanf
("%lld"
,&m)
;while
(m--
)// for (i = 1; i <= n; i++)
// // cout << endl;
// }
prim()
; cout << ans << endl;
return0;
}
kruskal:
#include
#include
#include
#include
#include
#include
#include
#include
using
namespace std;
long
long pre[
300005];
long
long map[
3005][
3005];
struct node
stu[
300005];
long
long ans;
long
long cnt;
bool
cmp(node x, node y)
long
long
find
(long
long x)
return pre[x]
=find
(pre[x]);
}void
join
(long
long x,
long
long y,
long
long w)
}int
main()
for(i =
1; i <= n; i++)}
long
long t, a, b;
scanf
("%lld"
,&t)
;while
(t--
)//將已經修好的路長度清零,直接連線起來。
long
long k =0;
for(i =
1; i <= n; i++)}
sort
(stu, stu + k, cmp)
;/* for (i = 0; i < k; i++)
for (i = 0; i <= n;i++)
cout << endl;*/
for(i =
0; i < k; i++)}
if(cnt >1)
cout << ans << endl;
return0;
}
最小生成樹
package 圖 最小生成樹是用最少的邊吧把所有的節點連線起來。於是和圖的深度優先搜素差不多。class stack public void push int key public int pop 檢視棧頂的元素 public int peek public boolean isempty cla...
最小生成樹
define max vertex num 20 最大頂點數 typedef int adjmatrix max vertex num max vertex num 鄰接矩陣型別 typedef char vertextype typedef struct mgraph struct dnodecl...
最小生成樹
在乙個具有幾個頂點的連通圖g中,如果存在子圖g 包含g中所有頂點和一部分邊,且不形成迴路,則稱g 為圖g的生成樹,代價最小生成樹則稱為最小生成樹。最小生成樹的特點 1 mst性質 最小生成樹性質 設g v,e 是乙個連通網路,u是頂點集v的乙個真子集。若 u,v 是g中一條 乙個端點在u中 例如 u...