- #include
- #include
- #define MAXN 1010
- #define inf 8989898
- using namespace std;
-
- int graph[MAXN][MAXN];
- int dis[MAXN],vis[MAXN];
-
- int main(){
- int n,m;//1-n
- cin>>n>>m;
- //初始化
- fill(graph[0],graph[0]+MAXN*MAXN,inf);
-
- fill(dis,dis+MAXN,inf);
-
- for(int i=0;i
- int a,b,c;
- cin>>a>>b>>c;
- graph[a][b]=graph[b][a]=c;
- }
- int u=1;
- dis[u]=0;
- long long sum=0;
- for(int i=1;i<=n;i++){
- int minDis=inf,v=-1;
- for(int j=1;j<=n;j++){
- if(!vis[j]&&minDis>dis[j]){
- v=j;
- minDis=dis[j];
- }
- }
- vis[v]=1;
- sum+=dis[v];
- for(int j=1;j<=n;j++){
- if(!vis[j]&&dis[j]>graph[v][j]){
- dis[j]=graph[v][j];
- }
- }
- }
- cout<
- return 0;
- }
Kruskal算法:加边法。利用并查集和排序。权重从小达到遍历,每次添加一条边(两端不连通),添加n-1次。
- #include
- #include
- #define MAXN 100010
- using namespace std;
- int p[MAXN];
- void init(){
- for(int i=0;i
- }
- int find(int a){
- if(a!=p[a])p[a]=find(p[a]);
- return p[a];
- }
- void merge(int a,int b){
- int pa=find(a),pb=find(b);
- if(pa!=pb)p[pb]=pa;
- }
- struct Edge{
- int from,to,length;
- };
- struct Edge edge[MAXN];
-
- bool cmp(Edge&a,Edge &b){
- return a.length
- }
- int main(){
- init();
- int n,m;//1-n
- cin>>n>>m;
- for(int i=0;i
- int a,b,c;
- cin>>edge[i].from>>edge[i].to>>edge[i].length;
- }
- sort(edge,edge+m,cmp);
- long long sum=0;
- int ct=0;
- for(int i=0;i
- if(find(edge[i].from)!=find(edge[i].to)){
- merge(edge[i].from,edge[i].to);
- sum+=edge[i].length;
- ct++;
- }
- if(ct==n-1)break;
- }
-
-
相关阅读:
扩展的多曝光图像合成算法及其在单幅图像增强中的应用。
软件项目管理 7.4.1.进度计划编排-超前与滞后方法
人机杂感
Java经典面试题
【开发规范】
MATLAB矩阵
JS-BOM-阶乘计算
6、数据访问
Qt视频播放器实现(目录)
猿创征文|全方位快速了解事务的4种隔离级别
-
原文地址:https://blog.csdn.net/weixin_52030057/article/details/132953326