主要参考资料:数据结构(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. SpringMVC 多个数据源 配置多个事物管理器 Multiple Transaction Managers

    http://docs.spring.io/spring/docs/3.0.x/spring-framework-reference/html/transaction.html#transaction ...

  2. eclipse中maven打包

    第一种方式:将依赖包打包进一个jar包中. <build> <plugins> <plugin> <artifactId>maven-compiler- ...

  3. Hive shell 命令

    Hive shell 命令. 连接 hive shell 直接输入 hive 1.显示表 hive> show tables; OK test Time taken: 0.17 seconds, ...

  4. css 图片文字对齐

    默认情况,是图片置顶对齐,文字置底对齐,所以通常图片高,文字低,不能水平居中对齐 解决办法:在css中设置图片的vertical-align属性, <img src="" s ...

  5. Hash表的表大小

    hash表的出现主要是为了对内存中数据的快速.随机的访问.它主要有三个关键点:Hash表的大小.Hash函数.冲突的解决. 这里首先谈谈第一点:Hash表的大小. Hash表的大小一般是定长的,如果太 ...

  6. CentOS 7 Minimal编译安装MySQL5.6

    写在前面,编译安装MySQL的优势:平台无关.可设定参数按需安装.安装的MySQL目录独立(方便清楚).更好的平台耦合及运行性能(很多运维的观点):缺点:编译安装较慢. 一.撤换系统防火墙 注:Cen ...

  7. 【案例分析】Linux下怎样查看port占用情况

    作者:zhanhailiang 日期:2014-11-08 基于express写一个測试server代码例如以下,可是执行失败,报"listen EADDRINUSE".字面上理解 ...

  8. ImportError: No module named Crypto.Cipher

    from Crypto.Cipher import AES 报错: ImportError: No module named Crypto.Cipher 解决方法: pip install pycry ...

  9. 实现QQ第三方登录教程(php)

    参看地址:http://www.bcty365.com/content-10-2945-1.html

  10. 中文路径-接口路径url不能传输中文解决方案

    服务端: