(kruscal12.1.1)POJ 2421 Constructing Roads(使用kruscal算法来生成最小生成树&&计算最小带权路径和)
2013-11-08 11:52
417 查看
/* * POJ_2421.cpp * * Created on: 2013年11月8日 * Author: Administrator */ #include <iostream> #include <cstdio> #include <cstring> #include <algorithm> using namespace std; struct edge{ int begin; int end; int weight; }; const int maxn = 110; int father[maxn]; edge e[maxn*maxn]; int map[maxn][maxn]; int find(int x){ if( x == father[x]){ return x; } father[x] = find(father[x]); return father[x]; } int kruscal(int count){//使用kruscal算法来生成最小生成树并计算带权路径和 int i; int sum = 0;//用sum来记录最小s生成树的边权和 for( i = 1 ; i < maxn ; ++i){ father[i] = i; } for( i = 0 ; i < count ; ++i){//枚举有序边集中的每一条边 int fx = find(e[i].begin); int fy = find(e[i].end); if(fx != fy){//若第k条边的两个端点i,j 分别属于两颗不同的子树 father[fx] = fy;//则将节点i所在的子树并入节点j所在的子树中 sum += e[i].weight; } } return sum; } bool compare(const edge& a , const edge& b){ return a.weight < b.weight; } //以上是用kruscal算法来解决问题的基本模板..... int main(){ int n; while(scanf("%d",&n)!=EOF){ int i,j; for(i = 1 ; i <= n ; ++i){ for(j = 1 ; j <= n ; ++j){ scanf("%d",&map[i][j]); } } int m; scanf("%d",&m); while(m--){ int a,b; scanf("%d%d",&a,&b); map[a][b] = map[b][a] =0;//将已有边的权值设为0 } int count = 0; for(i = 1 ; i <= n ; ++i){//距离矩阵的处理方式 for(j = i+1 ; j <= n ; ++j){ e[count].begin = i; e[count].end = j; e[count++].weight = map[i][j]; } } sort(e,e+count,compare);//kruscal算法要求边有序 int sum = kruscal(count); printf("%d\n",sum); } return 0; }
相关文章推荐
- (kruscal12.3.5)POJ 2485 Highways(使用kruscal来计算最小生成树的最大边)
- (kruscal12.3.1)POJ 1861 Network(求最小生成树的最大边&&并且输出各边的信息)
- POJ 2349 Arctic Network 最小生成树 prim && kruscal
- poj2421 Constructing Roads ——最小生成树入门题_Kruscal算法
- (kruscal12.2.1)POJ 1258 Agri-Net(使用kruscal来计算最小边权值)
- POJ 2421--Constructing Roads【水题 && 最小生成树 && kruskal】
- POJ 1861 && ZOJ 1542--Network 【最小生成树 && kruscal && 水题】
- POJ 2421--Constructing Roads【水题 && 最小生成树 && kruskal】
- Poj 2421 Constructing Roads(Prim 最小生成树)
- POJ 1789 Truck History 【最小生成树&&Kruskal】
- hdu 1301&&poj 1251 最小生成树prim实现
- ZOJ 2966 Build The Electric System 最小生成树 Kruscal && Prim
- POJ - 2421 Constructing Roads【最小生成树】
- NYOJ 434 && POJ 1251 Jungle Roads(最小生成树)
- POJ 2395 Out of Hay (Kruscal最小生成树)
- hdoj_1102Constructing Roads(最小生成树)&& poj_2485Highways
- poj 2377 Bad Cowtractors(kruscal最小生成树存在性)
- ACM: 简单最小生成树 图论题 poj 1…
- POJ 1258:Agri-Net(最小生成树&&prim)
- POJ ~ 2421 ~ Constructing Roads (最小生成树)