栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

最小生成树的prim算法

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

最小生成树的prim算法

题目:

输入数据:

测试数据1:
6 10
1 2 16
1 6 21
1 5 19
2 3 5
2 4 6
2 6 11
3 4 6
6 4 14
5 4 18
5 6 33
测试数据2:
2 1
1 2 9

输出数据:

输出数据1:
Case 1:56
(2,3)(2,4)(2,6)(1,2)(4,5)
输出数据2:
Case 2:9
(1,2)

算法思路:用tv装已连接的顶点,v装未连接的顶点,每次找tv中的所有顶点与v中的所有顶点的边中的最小边,连接最小边,将最小边中属于v集合顶点加入到tv中,并将其在v中删除,如此循环至t全部顶点都在tv中.
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
import java.util.Stack;

public class Main {
	static int max=9999;
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		int Id=1;
		Scanner cin= new Scanner(System.in);
		while(cin.hasNext()){
			int m=cin.nextInt();
			int n =cin.nextInt();
			int a[][]=new int[m+1][m+1];
			for(int i=1;i<=m;i++){
				for(int j=1;j<=m;j++){
					a[i][j]=max;
				}
			}
			for(int i=0;itv=new ArrayList();
			//装未已连接的顶点
			List v=new ArrayList();
			tv.add(1);
			for(int i=2;i<=m;i++) {
				v.add(i);
			}
			int sum=0;
			String str="";
			while(tv.size()!=m) {
				int min=max;
				int id=0;
				int tt=0;
				int tt2=0;
				for(int i=0;ia[t][v.get(j)]) {
							min=a[t][v.get(j)];
							id=v.get(j);
							tt=j;
							tt2=t;
						}
					}
				}
				sum+=min;
				tv.add(id);
				v.remove(tt);
				if(id 

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/604551.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号