ACM:prim最小生成树题目汇总
2016-05-03 19:20
495 查看
1.http://115.28.138.223/view.page?gpid=T18
其他类似的题目还有:Agri-Net http://poj.org/problem?id=1258
2.http://poj.org/problem?id=2421
此题要求在已经建有路的基础上进行最小生成树的查找,只需将已连接的路径的权值赋值为零即可。
import java.util.Scanner; public class Main{ static final int MAX=Integer.MAX_VALUE; public static void main(String[] args){ Scanner input=new Scanner(System.in); int n=input.nextInt(); int m=input.nextInt(); int [][]adjMatrix=new int ; for(int i=0;i<n;i++) for(int j=0;j<n;j++){ adjMatrix[i][j]=MAX; } for(int i=0;i<m;i++){ int start=input.nextInt(); int end=input.nextInt(); int weight=input.nextInt(); adjMatrix[start-1][end-1]=weight; adjMatrix[end-1][start-1]=weight; } int result=priAlgorithm(adjMatrix,n,0); System.out.println(result); } static int priAlgorithm(int [][]adjMatrix,int numberVertex,int initialVertex){ boolean[]visited=new boolean[numberVertex]; for(int i=0;i<numberVertex;i++){ visited[i]=false; } int min=MAX; int mincost=0; int []lowcostLine=new int[numberVertex]; for(int i=0;i<numberVertex;i++){ lowcostLine[i]=adjMatrix[initialVertex][i]; } visited[initialVertex]=true; int position=initialVertex; for(int i=1;i<numberVertex;i++){//易错点:只循环n-1次 for(int j=0;j<numberVertex;j++){ if(visited[j]==false&&lowcostLine[j]<min){ min=lowcostLine[j]; position=j; } } mincost+=min; visited[position]=true; min=MAX; //易错点:每遍历一次,还原min for(int k=0;k<numberVertex;k++){ if(visited[k]==false&&adjMatrix[position][k]<lowcostLine[k]){ lowcostLine[k]=adjMatrix[position][k]; } } } return mincost; }
其他类似的题目还有:Agri-Net http://poj.org/problem?id=1258
2.http://poj.org/problem?id=2421
此题要求在已经建有路的基础上进行最小生成树的查找,只需将已连接的路径的权值赋值为零即可。
import java.util.Scanner; public class Main{ public static int MAX=Integer.MAX_VALUE; public static void main(String[] args){ Scanner input=new Scanner(System.in); int VillageNumber=input.nextInt(); int [][]map=new int[VillageNumber][VillageNumber]; for(int i=0;i<VillageNumber;i++) for(int j=0;j<VillageNumber;j++) map[i][j]=MAX; for(int i=0;i<VillageNumber;i++) for(int j=0;j<VillageNumber;j++) map[i][j]=input.nextInt(); int RoadNumber=input.nextInt(); for(int i=0;i<RoadNumber;i++){ int start=input.nextInt(); int end=input.nextInt(); map[start-1][end-1]=0; map[end-1][start-1]=0; } int result=priAlgorithm(map,VillageNumber,0); System.out.println(result); } static int priAlgorithm(int [][]adjMatrix,int numberVertex,int initialVertex){ boolean[]visited=new boolean[numberVertex]; for(int i=0;i<numberVertex;i++){ visited[i]=false; } int min=MAX; int mincost=0; int []lowcostLine=new int[numberVertex]; for(int i=0;i<numberVertex;i++){ lowcostLine[i]=adjMatrix[initialVertex][i]; } visited[initialVertex]=true; int position=initialVertex; for(int i=1;i<numberVertex;i++){//易错点:只循环n-1次 for(int j=0;j<numberVertex;j++){ if(visited[j]==false&&lowcostLine[j]<min){ min=lowcostLine[j]; position=j; } } mincost+=min; visited[position]=true; min=MAX; //易错点:每遍历一次,还原min for(int k=0;k<numberVertex;k++){ if(visited[k]==false&&adjMatrix[position][k]<lowcostLine[k]){ lowcostLine[k]=adjMatrix[position][k]; } } } return mincost; } }
相关文章推荐
- cocos 一个描边shader
- Idea 文件注释的变量
- windows下tomcat7+solr5.1+zookeeper3.4.6 伪集群SolrCloud配置
- OC面向对象—封装
- Spark组件之GraphX学习2--triplets实践
- Linux开机过程
- 刷题第六天:南邮NOJ【1013三角形判断】
- java多线程并发库高级应用 之 多个线程之间共享数据的方式探讨
- 杭电1000
- java多线程并发库高级应用 之 其它同步工具类
- 在 Visio 中录制宏
- Android-EventBus-3.0.0使用
- 孤儿进程、僵死进程
- 8.跳台阶
- boost replace_if replace_all_regex_copy用法
- uboot 中内存测试,内存检测方法
- SparkLearning博客模版
- 邮箱服务器上所有用户的统计信息
- Air Infomation System 基于控制台的航班信息系统(方法总结)
- Windows下的指北针(指南针)--OpenGL版 Compass