zoukankan      html  css  js  c++  java
  • ACwing(基础)--- Prim

    朴素版prim算法(适用于稠密图)

    • 时间复杂度:O(n^2)
    • 类比Dijkstra算法:Dijkstra算法是更新到起始点的距离,Prim是更新到集合S的距离

    S:当前已经在联通块中的所有点的集合

    1. dist[i] = inf
    2. for n 次
      t<-S外离S最近的点
      st[t] = true
      利用t更新S外点到S的距离
    #include<iostream>
    #include<cstring>
    #include<algrorithm>
    #define mm(a,x) memset(a,x,sizeof a)
    #define inf 0x3f3f3f3f
    
    using namespace std;
    
    const int N = 510;
    int n,m;
    int mp[N][N],dist[N],vis[N];
    
    int prim() {
    	mm(dist,inf);
    	int res=0;
    	for(int i=0; i<n; i++) {
    		int t = -1;
    		for(int j=1; j<=n; j++) {
    			if(!vis[j]&&(t == -1||dist[t]>dist[j]))
    				t=j;
    		}
    		vis[t]=1;
    		if(i && dist[t] == inf) return inf;//如果不连通就返回inf 
    		if(i) res+=dist[t];//把边的权重存入res中 
    		for(int j=1; j<=n; j++) dist[j]=min(dist[j],mp[t][j]);
    	}
    	return res;
    }
    int main() {
    	cin>>n>>m;
    	mm(mp,inf);
    	while(m--) {
    		int a,b,c;
    		cin>>a>>b>>c;
    		mp[a][b]=mp[b][a]=min(mp[a][b],c);
    	}
    	int t = prim();
    	int (t == inf ) puts("impossible");
    	else printf("%d
    ",t);
    	return 0;
    }
    
  • 相关阅读:
    win10 系统下myeclipse 下启动 tomcat7 所遇到的问题
    搭建个人博客&论坛(LAMP):wordpress、discuz、phpMyAdmin
    拟合优度检验和独立性检验
    作业day19
    numpy
    正则模块
    模块功能
    模块
    匿名函数、异常处理
    递归和迭代器
  • 原文地址:https://www.cnblogs.com/bingers/p/13235781.html
Copyright © 2011-2022 走看看