主要参考资料:数据结构(C语言版)严蔚敏   ,http://blog.chinaunix.net/uid-25324849-id-2182922.html   代码测试通过。

package 图的建立与实现;

import java.util.*;

public class MGraph {
final int MAXVEX = 100;
final int INFINITY = 65535;
int[] vexs = new int[MAXVEX]; //顶点表
int[][] arc = new int[MAXVEX][MAXVEX]; //边表
boolean[] visited = new boolean[this.MAXVEX];
int numVertexes,numEdges;
public MGraph(){} public void CreateMGraph(){
int i,j,k,w;
System.out.println("请输入顶点数和边数:");
Scanner scan = new Scanner(System.in);
this.numVertexes = scan.nextInt();
this.numEdges = scan.nextInt();
System.out.println("请输入顶点信息,建立顶点表:");
for(i=0; i<this.numVertexes; i++){
this.vexs[i] = scan.nextInt();
}
//邻接矩阵的初始化
for(i=0; i<this.numVertexes; i++){
for(j=0; j<this.numVertexes; j++){
this.arc[i][j] = INFINITY;
}
}
System.out.println("请输入边的上标、下标、权值:");
for(k=0; k<this.numEdges; k++){
i = scan.nextInt();
j = scan.nextInt();
w = scan.nextInt();
this.arc[i][j] = w;
this.arc[j][i] = this.arc[i][j];//如果是无向图,矩阵对称
} } //图的深度优先遍历
public void DFS(int i){
int j;
this.visited[i] = true;
System.out.println(this.vexs[i]);
for(j=0; j<this.numVertexes; j++){
if(this.arc[i][j] < INFINITY && this.visited[j] == false){
this.DFS(j);
}
}
} public void DFSTraverse(){
int i;
for(i=0; i<this.numVertexes; i++){
this.visited[i] = false;
}
for(i=0; i<this.numVertexes; i++){
if(this.visited[i] == false){
this.DFS(i);
}
}
} //图的广度优先遍历
public void BFSTraverse(){
int i,j;
Queue<Integer> queue = new ArrayDeque<Integer>();
for(i=0; i<this.numVertexes; i++){
this.visited[i] = false;
}
for(i=0; i<this.numVertexes; i++){
if(this.visited[i] == false){
this.visited[i] = true;
System.out.println(this.vexs[i]);
queue.add(i);
while(queue.isEmpty() != true){
i = queue.remove();
for(j=0; j<this.numVertexes; j++){
if(this.arc[i][j] < INFINITY && visited[j] == false){
visited[j] = true;
System.out.println(this.vexs[j]);
queue.add(j);
}
}
}
}
}
} //Prim算法构造最小生成树
public void MinSpanTree_Prim(){
int min,i,j,k = 0;
int[] adjvex = new int[MAXVEX];
int[] lowcost = new int[MAXVEX];
lowcost[0] = 0;
adjvex[0] = 0;
for(i=1; i<this.numVertexes; i++){
lowcost[i] = this.arc[0][i];
adjvex[i] = 0;
//System.out.println(lowcost[i] + " ###");
}
for(i=1; i<this.numVertexes; i++){
min = INFINITY;
j = 1; k = 0;
while(j < this.numVertexes){
if(lowcost[j]!=0 && lowcost[j]<min){
min = lowcost[j];
k = j;
//System.out.println(k+ " $");
}
j++;
}
System.out.printf("(%d,%d)\n",adjvex[k],k);
lowcost[k] = 0;
for(j=1; j<this.numVertexes; j++){
if(lowcost[j]!=0 && this.arc[k][j]<lowcost[j]){
lowcost[j] = this.arc[k][j];
adjvex[j] = k;
}
}
}
}
}
package 图的建立与实现;

public class TestGraph {

	public static void main(String[] args) {
MGraph G = new MGraph();
G.CreateMGraph();
System.out.println("深度优先遍历");
G.DFSTraverse();
System.out.println("广度优先遍历");
G.BFSTraverse();
System.out.println("Prim算法构造最小生成树");
G.MinSpanTree_Prim();
} }

图的建立(邻接矩阵)+深度优先遍历+广度优先遍历+Prim算法构造最小生成树(Java语言描述)的更多相关文章

  1. 图的理解:深度优先和广度优先遍历及其 Java 实现

    遍历 图的遍历,所谓遍历,即是对结点的访问.一个图有那么多个结点,如何遍历这些结点,需要特定策略,一般有两种访问策略: 深度优先遍历 广度优先遍历 深度优先 深度优先遍历,从初始访问结点出发,我们知道 ...

  2. 存储结构与邻接矩阵,深度优先和广度优先遍历及Java实现

    如果看完本篇博客任有不明白的地方,可以去看一下<大话数据结构>的7.4以及7.5,讲得比较易懂,不过是用C实现 下面内容来自segmentfault 存储结构 要存储一个图,我们知道图既有 ...

  3. 图的深度优先和广度优先遍历(图以邻接表表示,由C++面向对象实现)

    学习了图的深度优先和广度优先遍历,发现不管是教材还是网上,大都为C语言函数式实现,为了加深理解,我以C++面向对象的方式把图的深度优先和广度优先遍历重写了一遍. 废话不多说,直接上代码: #inclu ...

  4. JavaScript实现树深度优先和广度优先遍历搜索

    1.前置条件 我们提前构建一棵树,类型为 Tree ,其节点类型为 Note.这里我们不进行过多的实现,简单描述下 Note 的结构: class Node{ constructor(data){ t ...

  5. 图的深度优先遍历&广度优先遍历

    1.什么是图的搜索? 指从一个指定顶点可以到达哪些顶点   2.无向完全图和有向完全图 将具有n(n-1)/2条边的无向图称为无向完全图(完全图就是任意两个顶点都存在边). 将具有n(n-1)条边的有 ...

  6. 数据结构5_java---二叉树,树的建立,树的先序、中序、后序遍历(递归和非递归算法),层次遍历(广度优先遍历),深度优先遍历,树的深度(递归算法)

    1.二叉树的建立 首先,定义数组存储树的data,然后使用list集合将所有的二叉树结点都包含进去,最后给每个父亲结点赋予左右孩子. 需要注意的是:最后一个父亲结点需要单独处理 public stat ...

  7. 深度优先遍历&广度优先遍历

    二叉树的前序遍历,中序遍历,后序遍历 树的遍历: 先根遍历--访问根结点,按照从左至右顺序先根遍历根结点的每一颗子树. 后根遍历--按照从左至右顺序后根遍历根结点的每一颗子树,访问根结点. 先根:AB ...

  8. tree的遍历--广度优先遍历

    一.二叉树demo var tree = { value: '一', left: { value: '二', left: { value: '四', right: { value: '六' } } } ...

  9. 图的存储,搜索,遍历,广度优先算法和深度优先算法,最小生成树-Java实现

    1)用邻接矩阵方式进行图的存储.如果一个图有n个节点,则可以用n*n的二维数组来存储图中的各个节点关系. 对上面图中各个节点分别编号,ABCDEF分别设置为012345.那么AB AC AD 关系可以 ...

随机推荐

  1. RRD.so文件 rrdruby

    ubuntu 12.04绑定rrdruby gem install librrd 用来装rrdruby,这样才能找到RRD.so文件然后在rb文件中加入这两句话: $: << '/path ...

  2. PHP7新特性的介绍

    关于PHP 20年的发展历史: 迄今为止最流行的WEB开发语言: 超过82%的网站都会使用PHP作为他们的服务端开发语言: 新特性介绍 PHP NG – Zend Engine 3 抽象语法树 64位 ...

  3. 用window调用kjb和ktr

    1.    运行cmd,进入kettle的目录cd C:\soft\kettle\data-integration 2.    运行start pan.bat命令 Pan—转换执行器(命令行方式),一 ...

  4. css 3 制作水波状进度条

    效果图如下 : 代码如下: <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> ...

  5. laravel bald视图控制流与子视图

    1:laravel 视图控制流的写法 假设控制器代码如下 $data = [ 0 => '张三', 1 => '李四', 2 => '王五' ]; return view('test ...

  6. double类型保留2位小数

    double d = 12.2289; java.text.DecimalFormat df = new java.text.DecimalFormat("#.00"); Syst ...

  7. fanqiang_bak

  8. C++ 类的隐式转换

    所谓类的隐式转换,就是将实参类型转成形参类型--如果不一致的话. 这个转换与基本类型转换不太一样,具体则是在形参类型的构造函数中使用实参类型的数据,从而构造出一个临时对象. 下面的代码,类Person ...

  9. php header函数下载文件实现代码

    在php中header函数的使用很大,header不但可以向客户端发送原始的 HTTP 报头信息,同时还可以直接实现文件下载操作 header函数最常用的不是用于下载而是用于发送http类的 跳转 它 ...

  10. Oracle 12c安装详细步骤,带截图

    1,在官网上下载oracle的压缩文件,两个都要下载. 并两个同时选中解压在一个文件夹里面. 2,解压之后,如下图,点击setup.exe稍等一会儿 ,3,开始安装: 不选点击下一步,或者直接点击下一 ...