prime_poj 1287O(n^2) 邻接表实现

原创 2012年03月26日 23:14:35
#include<cstdio>
#include<cstring>
#include<vector>

#define MAXN 60
#define INF 1000000000

using namespace std;

typedef struct{
    int v, value;
}Edge;

typedef vector<Edge> VE;
VE eg[MAXN];
bool visited[MAXN];
int LowValue[MAXN];

int Prim(int n){
    memset(visited,0, sizeof(visited));
    for(int i = 1; i <= n; i++)  LowValue[i] = INF;
    visited[1] = 1;
    int st = 1;
    int sum = 0;
    for(int i = 0; i < eg[1].size(); i++) {
        //printf("1 -> %d : %d\n", eg[1][i].v, eg[1][i].value);
        if(eg[1][i].value < LowValue[eg[1][i].v]) LowValue[eg[1][i].v] = eg[1][i].value;
    }

    //printf("eg1.size : %d\n", LowValue[2]);
    for(int i = 1; i < n; i++){
        int minV = INF;
        for(int j = 1; j <= n; j++){
            if(!visited[j] && LowValue[j] < minV){

                minV = LowValue[j];
                //printf("minv:%d\n",minV);
                st = j;
            }
        }
        sum += minV;
        visited[st] = 1;
        //printf("st:%d  minV%d\n", st, minV);
        for(int j = 0; j < eg[st].size(); j++){
            if(!visited[eg[st][j].v] && eg[st][j].value < LowValue[eg[st][j].v]) LowValue[eg[st][j].v] = eg[st][j].value;
        }
    }
    return sum;
}
int main(){
    int n, m, a,b,c;
    Edge e;
    while(scanf("%d", &n),n){
        scanf("%d", &m);
        for(int i = 1; i <=m; i++){
            eg[i].clear();
        }
        for(int i = 0; i < m; i++){
            scanf("%d%d%d", &a, &b, &c);
            e.v = b; e.value = c;
            eg[a].push_back(e);
            e.v = a;
            eg[b].push_back(e);
        }
        int len = Prim(n);
        printf("%d\n", len);
        getchar();
    }
    return 0;
}


Poj 1251 Jungle Roads (邻接表 + 优先队列 + Prime 最小生成树)

突然翻出了几份之前写的代码,拿出来回顾一下。 题意:

NYOJ 20 吝啬的国度(邻接表、二维向量、队列、BFS、时间复杂度为O(n))

吝啬的国度题目链接:NYOJ 20 吝啬的国度 时间限制:1000 ms | 内存限制:65535 KB 难度:3描述 在一个吝啬的国度里有N个城市,这N个城市间只有N-1条路把这个...

图之Prime算法(邻接表)实现----最小生成树

1.prime算法思想:(只与顶点有关)prime算法求最小生成树时,和边数无关,只和顶点的数量有关,时间复杂度是O(n^2),所以呢,适合于求稠密网的最小生成树;将一个图的顶点分为两部分,一部分是最...

POJ 1287 Networking(prime算法)

Networking Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 3788   Acc...

梅森素数(Mersenne prime)判断, FFT 大数乘法 (非递归), O(n^2 log n), c++

原创代码,请勿转载! FFT 的单位根采用数论中的模方程根,避免浮点数运算。 w^{2^k}  = 1 (mod MOD) FFT简介:快速傅里叶变换, 参考 http://beige.ucs.i...

【最小生成树入门专题1】C - 这是水题3【prime】未用堆和邻接表

The Head Elder of the tropical island of Lagrishan has a problem. A burst of foreign aid money was s...

最小生成树模版(Prime+邻接表)

最小生成树模版(Prime+邻接表) 使用优先队列+邻接表的prime算法#include #include using namespace std; typedef struct ...
  • Tsaid
  • Tsaid
  • 2011年11月05日 08:42
  • 1796

POJ 1422 二分匹配 最小路径覆盖(邻接表实现)

题意:一个地图上有n个小镇,以及连接着其中两个小镇的有向边,而且这些边无法形成回路。现在选择一些小镇空降士兵(1个小镇最多1个士兵),士兵能沿着边走到尽头,问最少空降几个士兵,能遍历完所有的小镇。思路...
  • naipp
  • naipp
  • 2016年07月22日 11:02
  • 115

poj 1469 COURSES(二分匹配 vector 邻接表 实现)

COURSES Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 18986   Accep...
  • lsgqjh
  • lsgqjh
  • 2015年06月25日 19:03
  • 416
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:prime_poj 1287O(n^2) 邻接表实现
举报原因:
原因补充:

(最多只允许输入30个字)