Poj 1258 Agri-Net

http://poj.org/problem?id=1258

题意:给N个点,和N*N的矩阵(表示Ni到Nj的距离),求连通所有点的最小距离。

题解:最小生成树模板……prim……

每两个点之间距离不超过100,000,刚看时INF打成了10,010……Holy shit……怒WA……

 1 //
 2 //  main.cpp
 3 //  POJ 1258
 4 //
 5 //  Created by zhang on 14-3-31.
 6 //  Copyright (c) 2014年 apple. All rights reserved.
 7 //
 8 
 9 #include <iostream>
10 #include <cstdio>
11 #include <algorithm>
12 
13 using namespace std;
14 
15 const int maxn=110;
16 const int INF=1001000;
17 int cost[maxn][maxn];
18 int MINC[maxn];
19 bool used[maxn];
20 int V;
21 
22 int prim()
23 {
24     for (int i=0; i<V; i++) {
25         MINC[i]=INF;
26         used[i]=false;
27     }
28     MINC[0]=0;
29     int res=0;
30     while (1) {
31         int v=-1;
32         for (int u=0; u<V; u++) {
33             if (!used[u]&&(v==-1||MINC[u]<MINC[v])) {
34                 v=u;
35             }
36         }
37         if (v==-1) {
38             break;
39         }
40         used[v]=true;
41         res+=MINC[v];
42         for (int u=0; u<V; u++) {
43             MINC[u]=min(MINC[u],cost[v][u]);
44         }
45     }
46     return res;
47 }
48 int main()
49 {
50     //freopen("/Users/apple/Desktop/POJ 1258/POJ 1258/in", "r", stdin);
51     //freopen("/Users/apple /Desktop/POJ 1258/POJ 1258/out", "w", stdout);
52     int N;
53     while (scanf("%d",&N)!=EOF) {
54         V=N;
55         for (int i=0; i<N; i++) {
56             for (int j=0; j<N; j++) {
57                 cin>>cost[i][j];
58                 //scanf("%d",&cost[i][j]);
59             }
60         }
61         printf("%d\n",prim());
62     }
63     return 0;
64 }

 

转载于:https://www.cnblogs.com/der-z/p/3636838.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值