`
潇潇暮雨
  • 浏览: 29243 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

prim算法的Java实现

阅读更多

针对于树的最小生成树的问题,可以采用以点或者以边为主的方式生成,前面的krustal算法采用以边为主,而prim算法则采用的是以点为主,俗语有云:萝卜青菜各有所爱!在分析问题的时候,根据不通情况,采用不通的方式,将事半功倍!

 

下面是java实现代码:

 

package com.sfsj.chap3;

import java.util.ArrayList;
import java.util.List;

/**
 * @author lxy prim算法的实现 输入一带权值的无向连通图 产生改图的最小生成树
 */
public class Prim {
 /*
  * 使用数字代替字符 A-0,B-1,C-2,D-3,E-4
  */
 private static final int MOUSTMAX = 1000;

 private static final List<String> START = new ArrayList<String>();

 /**
  * 程序入口
  *
  * @param args
  */
 public static void main(String[] args) {
  // 声明一个二维数组保存边的权值
  int[][] array = new int[5][5];
  // 给二维数组全部赋值
  for (int i = 0; i < array.length; i++) {
   for (int j = 0; j < array.length; j++) {
    array[i][j] = MOUSTMAX;
   }
  }
  // 输入边的权值(采用有向图的方式)
  array[0][2] = 200;// AC权值为200
  array[0][3] = 80;// AD权值为80
  array[0][4] = 50;// AE权值为50
  array[1][2] = 70;// BC权值为70
  array[1][3] = 75;// BD权值为75
  array[1][4] = 300;// BE权值为300
  array[2][3] = 60;// CD权值为60
  array[3][4] = 90;// DE权值为90
  
  array[2][0] = 200;// AC权值为200
  array[3][0] = 80;// AD权值为80
  array[4][0] = 50;// AE权值为50
  array[2][1] = 70;// BC权值为70
  array[3][1] = 75;// BD权值为75
  array[4][1] = 300;// BE权值为300
  array[3][2] = 60;// CD权值为60
  array[4][3] = 90;// DE权值为90
  
  //默认以A点开始
  START.add("E");
  //保存权值最小边的坐标
  int varx=100,vary=100;
  while(true){
   int min=1000;
   List<Integer> L=new ArrayList<Integer>();
   for(int i=0;i<START.size();i++){
    if(min>findmin(array, toInt(START.get(i)))){
     min=findmin(array, toInt(START.get(i)));
     L=findpoint(array, min);
     varx=L.get(0);
     vary=L.get(1);
    }
   }
   
   System.out.print(toChar(varx)+toChar(vary)+" ");
   //添加新的点到点集中去
   if(!START.contains(toChar(varx))){
    START.add(toChar(varx));
   }
   if(!START.contains(toChar(vary))){
    START.add(toChar(vary));
   }
   //当点击中包含所有的点的时候退出循环
   if(START.size()==5){
    break;
   }
  }
  
 

 }

 /**
  * 找出数组中指定值的坐标并修改值
  * @param array
  * @param min
  * @return
  */
 public static List<Integer>findpoint(int[][]array,int min){
  List<Integer> L=new ArrayList<Integer>();
  for(int i=0;i<array.length;i++){
   for(int j=0;j<array.length;j++){
    if(array[i][j]==min){
     array[i][j]=MOUSTMAX;
     L.add(i);
     L.add(j);
     break;
    }
   }
  }
  return L;
 }
 /**
  * 找出以某点为顶点权值最小的边
  * @param array 代表权值的数组
  * @param point 点代表的数字
  * @return
  */
 public static int findmin(int[][] array, int point) {
  int min = array[0][0];
  //找出权值最小边
  for (int j = 0; j < array.length; j++) {
   if (array[point][j] <= min) {
    min = array[point][j];
   }
  }
  return min;
 }

 /**
  * 实现有字符向数值转换
  * @param char1
  * @return
  */
 public static int toInt(String char1) {
  int num = Integer.MAX_VALUE;
  if ("A".equals(char1)) {
   num = 0;
  }
  if ("B".equals(char1)) {
   num = 1;
  }
  if ("C".equals(char1)) {
   num = 2;
  }
  if ("D".equals(char1)) {
   num = 3;
  }
  if ("E".equals(char1)) {
   num = 4;
  }

  return num;
 }

 /**
  * 实现有数值向字符转变
  * @param var
  * @return
  */
 public static String toChar(int var) {
  String char1 = "";
  switch (var) {
  case 0:
   char1 = "A";
   break;
  case 1:
   char1 = "B";
   break;

  case 2:
   char1 = "C";
   break;

  case 3:
   char1 = "D";
   break;

  case 4:
   char1 = "E";
   break;

  }
  return char1;
 }

}

分享到:
评论

相关推荐

    Prim算法Java实现

    ### Prim算法Java实现 #### 背景与概念 Prim算法是一种用于寻找加权无向图中的最小生成树(Minimum Spanning Tree, MST)的经典算法。一个无向加权图由一组顶点和一组边组成,每条边都有一个权重值。在本任务中,...

    最小生成树 prim算法和Kruskal算法实现

    prim算法 Kruskal算法分别实现最小生成树

    用Java利用prim算法实现最小生成树

    本篇文章将重点介绍Prim算法及其Java实现。 #### 二、Prim算法原理 Prim算法是一种贪心算法,其核心思想是从任意一个顶点开始,每次选择与当前已形成的树最近的一个顶点加入到树中,直到所有顶点都被加入为止。...

    一个简单的prim算法的实现

    代码可能使用了某种编程语言,如C++、Java或Python,通过数据结构(如邻接矩阵或邻接表)来表示图,然后应用Prim算法找出最小生成树。如果代码使用了优先队列,那么在每轮迭代中,它会找出当前未加入树的顶点中与树...

    java 最小生成树 Prim算法

    本文本采用的是java编写的最小生成树Prim算法,参考书:计算机算法设计与分析

    Java编写的prim算法

    Java编写的prim算法,能够满足相对较少节点的最小生成树生成

    prim算法 代码 报告

    - **算法实现**:包括Prim算法的伪代码或者特定编程语言(如C++, Java, Python等)的实现。 - **性能分析**:分析算法的时间复杂度,Prim算法的时间复杂度为O(E log E)或O(E log V),其中E是边的数量,V是顶点的数量...

    Prim算法与Kruskal算法求最小生成树

    在这个问题中,Prim算法和Kruskal算法是两种常用的方法。 1. Prim算法: Prim算法是一种贪心策略,它从一个起始顶点开始,逐步添加边,每次添加一条与已选择顶点集形成最小权重边的新边。这个过程不断进行,直到...

    代码 最小生成树Prim算法代码

    代码 最小生成树Prim算法代码代码 最小生成树Prim算法代码代码 最小生成树Prim算法代码代码 最小生成树Prim算法代码代码 最小生成树Prim算法代码代码 最小生成树Prim算法代码代码 最小生成树Prim算法代码代码 最小...

    POJ 1751 求最小生成树prim算法(JAVA)

    描述中提到的"NULL"表示没有提供具体的实现细节,但我们可以从标签 "源码 工具" 推测,这个挑战可能涉及到提供一段Java代码来实现Prim算法。通常,一个Java版本的Prim算法会包含以下关键部分: - `Graph` 类:表示...

    随机迷宫代码(深度优先和prim算法生成迷宫,自动寻路)

    这里我们将深入探讨标题和描述中提及的“深度优先”和“Prim算法”在生成迷宫中的应用,以及如何实现自动寻路功能。 首先,深度优先搜索(DFS,Depth-First Search)是一种用于遍历或搜索树或图的算法。在迷宫生成...

    java算法分析与设计之最小生成树(prim算法)源代码

    java算法分析与设计之最小生成树(prim算法)源代码 算法作为计算机专业学生的必修课,同时也是软件开发过程中必备的编程思想,对学习研究计算机专业意义重大;正因为这门课程难,所以除了相关方面的书籍,网络资源少...

    Kruskal算法和prim算法求最小生成树学习小结(JAVA)

    具体代码细节可能包括边类的定义(包含源点、终点和权重),以及Kruskal和Prim算法的函数实现。在`iteye.com`上的博文链接可能提供了更详细的解释和示例。 **工具**: 在实际开发中,这些算法可以用于优化网络设计...

    最小生成树Prim算法

    Java实现: ```java public class PrimTree { private static int MAX = Integer.MAX_VALUE; public static int prim(int graph[][], int n) { // ... } public static void main(String[] args) { int ...

    最小生成树(Prim)算法java实现

    最小生成树(Minimum Spanning Tree, MST)是图论...在Java中实现Prim算法,主要涉及图的表示、初始化,以及Prim算法的迭代过程。通过这个过程,可以找到一个加权图的最小生成树,满足连接所有顶点且总权重最小的条件。

    最短生成树的Prim算法

    而“20531774prim”可能是某种编程语言实现Prim算法的代码示例,例如Java、C++或Python,供学习者参考和实践。 了解和掌握Prim算法不仅可以加深对图论的理解,也有助于解决实际问题,如网络设计、资源分配等,这些...

    哈夫曼编码算法与分析(java实现)

    哈夫曼编码算法与分析(java实现) 哈夫曼编码是一种广泛用于数据文件压缩的十分有效的编码方法,它通过对文件中各个字符出现的频率进行分析,生成各个字符的哈夫曼编码方案。哈夫曼编码的主要思想是通过构造一棵...

    java GUI实现prim最小生成树算法

    Java GUI实现Prim最小生成树算法是一个交互式的图形用户界面,用于演示和理解经典的图论算法——Prim算法。Prim算法是解决网络中寻找最小生成树问题的一种有效方法,它能找出连接所有顶点的边,使得这些边的总权重...

    JAVA实现迷宫游戏(使用随机prim算法生成随机迷宫,并使用java中的swing包和awt包编写图形用户界面,手绘胜利界面)

    【JAVA实现迷宫游戏】 本项目是一个基于JAVA的迷宫游戏,主要采用了随机Prim算法生成随机迷宫,并利用Swing和AWT包构建图形用户界面(GUI),同时包含了一个手绘的游戏胜利界面。以下是该迷宫游戏的关键知识点: 1...

Global site tag (gtag.js) - Google Analytics