HDOJ 1301 Jungle Roads

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1301

//HDOJ1301
#include<iostream>#include<cstring>
using namespace std;
#define MAX 99999
#define LEN 30
int dist[LEN];//某点的权值  起始点到目标点的权值
int map[LEN][LEN];//某点到某点两点之间的权值
bool isvisitd[LEN];//表示某点是否访问过

//初始化map数组  设置为无穷大
void  init(int n){
    for(int  i = 0;i<=n;i++) {
         for(int  j = 0;j<=n;j++)
            map[i][j] = MAX;
     }
} 

//prim最小生成树的算法
int prim(int n){
    int i,j,min,pos,sum;
    sum = 0;   //最小生成树的权值

    //初始化,表示没有一点走过
    memset(isvisitd,false,sizeof(isvisitd));

    //初始化给dist数组赋值
    for(i = 1;i<=n;i++){
        dist[i] = map[1][i];
    }

    isvisitd[1] = true;//标记1已被访问  从1开始

    //找到权值最小点并记下位置
    for(i = 1;i<n;i++){
            min = MAX;
            for(j = 1;j<=n;j++){
            if(!isvisitd[j]&&dist[j]<min){
                min = dist[j];
                pos = j;//记录下该位置
            }
        }

        sum+=min;
        isvisitd[pos] = true;

        //更新权值
        for(j = 1;j<=n;j++)    {
            if(!isvisitd[j]&&dist[j]>map[pos][j]){
                dist[j] = map[pos][j];
            }
        }

    }
    return sum;
}
int main(){
    int i,j,n,m,len;
    char start,end;
    while(scanf("%d",&n)!=EOF){
        if(n==0){
            break;
        }

        init(n);//初始化

        for(i=0;i<n-1;i++){
            cin>>start>>m;
            for( j = 0;j<m;j++){
                cin>>end>>len;
                map[i+1][end-‘A‘+1] = len;
                map[end-‘A‘+1][i+1] = len;
            }
        }
        cout<<prim(n)<<endl;
    }
    return 0;

}

运行结果如下:

最小生成树 Prim算法的实现及应用  http://blog.csdn.net/worker90/article/details/6642959

HDOJ 1301 Jungle Roads,布布扣,bubuko.com

时间: 2024-10-12 12:07:00

HDOJ 1301 Jungle Roads的相关文章

hdu 1301 Jungle Roads

链接:hdu 1301 题意:n个村庄,已知n-1村庄分别到其他村庄修路的费用,求是n个村庄连通的最小费用 分析:这个是最小生成树的题,只不过村庄的编号为A-Z的大写字母,操作比较麻烦,可以将其对应转化为1-26, 这样就与普通的最小生成树题一样了 #include<cstdio> #include<algorithm> using namespace std; int f[50],n,m; struct stu { int a,b,c; }t[300]; int cmp(stru

hdu 1301 Jungle Roads (基础最小生成树)

题目: 链接:点击打开链接 题意: 对n个村庄之间的路进行修理, 然后是n-1行,每行的第一组数据时一个大写字母VIL和一个数K,Vil表示从这个村庄出发,K表示刚才的那个字母代表的村庄和其他村庄的路的数目,接下来在同一行是K组数据,每组是一个大写字母和一个数,大写字母表示和第一个村庄连接的村庄,数表示维修他们之间的路所需的费用.现在为了使维修费油最低,只需所维修的路使每个村庄都是直接或间接的连接即可,求最小的费用. 思路: 只需把输入数据处理好即可.其他都是kruskal模板.' 代码: #i

HDU - 1301 - Jungle Roads (最小生成树!!prim算法!!)

Jungle Roads Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 4572    Accepted Submission(s): 3354 Problem Description The Head Elder of the tropical island of Lagrishan has a problem. A burst o

hdu 1301 Jungle Roads 一个很水的题 AC率也可以知道了 但是题目很难理解啊 英语渣o(╯□╰)oKruskal算法

Jungle Roads Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 4725    Accepted Submission(s): 3471 Problem Description The Head Elder of the tropical island of Lagrishan has a problem. A burst o

HDU 1301:Jungle Roads【Prim】

  Jungle Roads Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 5516    Accepted Submission(s): 3981 Problem Description The Head Elder of the tropical island of Lagrishan has a problem. A burst

hdu 1301 Jungle Roads 最小生成树

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1301 The Head Elder of the tropical island of Lagrishan has a problem. A burst of foreign aid money was spent on extra roads between villages some years ago. But the jungle overtakes roads relentlessly,

Hdu 1301 Jungle Roads (最小生成树)

地址:http://acm.hdu.edu.cn/showproblem.php?pid=1301 很明显,这是一道“赤裸裸”的最小生成树的问题: 我这里采用了Kruskal算法,当然用Prim算法也一样可以解题. #include <iostream> #include <cstring> #include <cstdio> #include <cstdlib> using namespace std; typedef struct node{ int f

最小生成树 || HDU 1301 Jungle Roads

裸的最小生成树 输入很蓝瘦 **并查集 int find(int x) { return x == fa[x] ? x : fa[x] = find(fa[x]); } 找到x在并查集里的根结点,如果两个端点在同一个集合内,find之后两个值就相等了 每次找到权值最小的端点不在同一集合的边 把两个集合合并 #include <iostream> #include <cstdio> #include <algorithm> using namespace std; int

HDU 1301 &amp;POJ 1215 Jungle Roads【最小生成树,Prime算法+Kruskal算法】

Jungle Roads Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 6737    Accepted Submission(s): 4893 Problem Description The Head Elder of the tropical island of Lagrishan has a problem. A burst o