主要参考资料:数据结构(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. java资料——链表(转)

    链表 链表是一种物理存储单元上非连续.非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的.链表由一系列结点(链表中每一个元素称为结点)组成,结点可以在运行时动态生成.每个结点包括两个 ...

  2. kernel headers

    linux/delay延迟相关函数,长延时ssleep msleep(睡眠等待),短延时mdelay udelay(忙等待) linux/sched.h进程相关的头文件, struct task_st ...

  3. uboot中bootargs实现

    setup.h通过宏定义实现了bootargs传递参数到内核,值得以后编程学习. include/asm-arm/setup.h 14  * NOTE: 15  *  This file contai ...

  4. 用SNMP实现对大型网络的轻松管理!

     原文来自:http://guojiping.blog.51cto.com/5635432/985885 一.原理介绍: SNMP简介   目前网络中用得最广泛的网络管理协议是SNMP(Simple ...

  5. copy src remote_src false表示本地,true在远程

    文件组装模块-assemble assemble主要是将多份配置文件组装为一份配置文件. 参数 必填 默认 选项 说明 Backup 否 No Yes/no 是否创建备份文件,使用时间戳 Delimi ...

  6. Android代码的几点小技巧

     1)View的状态保存与恢复dispatchRestoreInstanceStateonRestoreInstanceStateonSaveInstanceState 2)Service的前台服务使 ...

  7. android jni aotf 错误

    在jni中希望将字符串转成浮点型数据,使用了atof函数.出现错误: failed: Cannot load library: soinfo_relocate(linker.cpp:975): can ...

  8. 电视不支持AirPlay镜像怎么办?苹果iPhone手机投屏三种方法

    导读:苹果手机多屏互动功能在哪里?iPhone苹果手机没有AirPlay镜像怎么办?三种方法教你苹果iPhone手机怎么投影到智能电视上. 前言: 苹果iPhone手机投屏到电视设备上,需要使用到Ai ...

  9. [转]NMON服务器监控、指标说明

    一.NMON中的各项参数指标: SYS_SUMM:显示当前服务器的总体性能情况 Total System I/OStatistics:Avg tps during an interval:显示采集间隔 ...

  10. 51地图标注接口(EZMarker API)

    功能 在很多时候,您需要您的用户标出一个位置,比如:一个房地产网站,用户在登记新楼盘的时候,就需要在地图上标出这个楼盘的位置,这个时候就可以用到本接口. 地图标注接口(EZMarker API)是我要 ...