javascript实现kruskal算法
<script>
//图的构建
function vnode() {
this.visited = 0;
this.vertex = 0;
this.arcs = new Array();
}
function G() {
this.adjlist = new Array();
}
//0 1 2 3 4 5
var a = [[0, 7, 8, 0, 0, 9], //
[0, 0, 0, 2, 5, 0], //
[0, 0, 0, 5, 0, 6], //
[0, 0, 0, 0, 9, 0], //
[0, 0, 0, 0, 0, 7], //
[0, 0, 0, 0, 0, 0]]; //
function creategraph() {
var g = new G();
for (i = 0; i < 6; i++) {
g.adjlist[i] = new vnode();
g.adjlist[i].vertex = i;
g.adjlist[i].arcs = (function () {
var b = new Array();
for (j = 0; j < 6; j++)
if (a[i][j]) { b.push(new Number(j)); b[b.length - 1].weight = a[i][j]; }
return b;
})();
}
return g;
} var s = new Array();
var g = creategraph();
var arcs = new Array();
for (i = 0; i < 6; i++) {
for (j = 0; j < g.adjlist[i].arcs.length; j++) {
var b = {};
b.a = i;
b.b = g.adjlist[i].arcs[j];
b.c = g.adjlist[i].arcs[j].weight;
arcs.push(b);
} }
arcs.sort(function (a, b) {
return a.c - b.c;
}) function kruskal() {
for (i = 0; i < 6; i++) {
s.push([i]);
s[i].e = new Array();
}
var flag = 0;
loop: for (i = 0; i < arcs.length; i++) {//判断一条边是否可以被选取
if (flag) { i = 0; flag = 0; continue; }
for (j = 0; j < s.length; j++) {//检查选取的边的两个端点是否同时落在以构建的树中
for (k = 0; k < s[j].length; k++) {
if (s[j][k] == arcs[i].a) {//如果一个端点落在一棵树上,继续检查另一个端点是否落在同一棵树上 for (l = 0; l < s[j].length; l++) {
if (s[j][l] == arcs[i].b) {//如果两端点都落在同一棵树上,则继续取下一条边进行验证
continue loop; }
if (l == (s[j].length - 1)) {//不落在同一棵树上,则把一个端点所在的树和另一个端点所在的树合并
for (m = 0; m < s.length; m++) {
for (n = 0; n < s[m].length; n++) { if (s[m][n] == arcs[i].b) {//找到另一端点所在的树,进行合并
alert(arcs[i].b + "---" + arcs[i].a);
for (v = 0; v < s[m].length; v++) {
s[j].push(s[m][v]);
}
flag = 1;
s.splice(m, 1);
continue loop; } } } } } } } } }
alert(s.length);
}
kruskal();
</script>
javascript实现kruskal算法的更多相关文章
- 图的生成树(森林)(克鲁斯卡尔Kruskal算法和普里姆Prim算法)、以及并查集的使用
图的连通性问题:无向图的连通分量和生成树,所有顶点均由边连接在一起,但不存在回路的图. 设图 G=(V, E) 是个连通图,当从图任一顶点出发遍历图G 时,将边集 E(G) 分成两个集合 T(G) 和 ...
- 最小生成树---Prim算法和Kruskal算法
Prim算法 1.概览 普里姆算法(Prim算法),图论中的一种算法,可在加权连通图里搜索最小生成树.意即由此算法搜索到的边子集所构成的树中,不但包括了连通图里的所有顶点(英语:Vertex (gra ...
- javascript数据结构与算法--高级排序算法
javascript数据结构与算法--高级排序算法 高级排序算法是处理大型数据集的最高效排序算法,它是处理的数据集可以达到上百万个元素,而不仅仅是几百个或者几千个.现在我们来学习下2种高级排序算法-- ...
- javascript数据结构与算法-- 二叉树
javascript数据结构与算法-- 二叉树 树是计算机科学中经常用到的一种数据结构.树是一种非线性的数据结构,以分成的方式存储数据,树被用来存储具有层级关系的数据,比如文件系统的文件,树还被用来存 ...
- javascript数据结构与算法--散列
一:javascript数据结构与算法--散列 一:什么是哈希表? 哈希表也叫散列表,是根据关键码值(key,value)而直接进行访问的数据结构,它是通过键码值映射到表中一个位置来访问记录的,散列 ...
- javascript数据结构与算法---队列
javascript数据结构与算法---队列 队列是一种列表,不同的是队列只能在队尾插入元素,在队首删除元素.队列用于存储按顺序排列的数据,先进先出,这点和栈不一样(后入先出).在栈中,最后入栈的元素 ...
- javascript数据结构与算法---栈
javascript数据结构与算法---栈 在上一遍博客介绍了下列表,列表是最简单的一种结构,但是如果要处理一些比较复杂的结构,列表显得太简陋了,所以我们需要某种和列表类似但是更复杂的数据结构---栈 ...
- javascript数据结构与算法---列表
javascript数据结构与算法---列表 前言:在日常生活中,人们经常要使用列表,比如我们有时候要去购物时,为了购物时东西要买全,我们可以在去之前,列下要买的东西,这就要用的列表了,或者我们小时候 ...
- 最小生成树的Kruskal算法实现
最近在复习数据结构,所以想起了之前做的一个最小生成树算法.用Kruskal算法实现的,结合堆排序可以复习回顾数据结构.现在写出来与大家分享. 最小生成树算法思想:书上说的是在一给定的无向图G = (V ...
随机推荐
- goldengate 12c 针对oracle 12c配置的主要变化
由于oracle 12c已经是多租户架构,在使用OGG同步的时候,需要考虑下面一些情况 一个 CDB包含多个PDB,源端部署的一个extract可访问所有pdb redo,理论上不需要每个pdb单独配 ...
- Activity(活动)-初讲
是一种可以包含用户界面的组件,主要用于和用户进行交互. 上一次我们的MainActivity.java 是ADT帮我们自动创建的.手动创建Activity可以加深我们的理解和记忆,于是我们先自己手动创 ...
- 转 Learning To Rank之LambdaMART的前世今生
http://blog.csdn.net/huagong_adu/article/details/40710305
- 0125 多线程 继承Thread 练习
//定义一个继承Thread类的类,并覆盖run()方法,在run()方法中每隔100毫秒打印一句话public class Csh extends Thread{ public void run() ...
- HDU 1114 Piggy-Bank (poj1384)
储钱罐 [题目描述] 今年的ACM比赛在xxx国举行,为了比赛的顺利进行,必须提前预算好需要的费用,以及费用的来源.费用的主要来源是只进不出的金钱.其实原理很简单,每当ACM成员有任何一点小钱,他们就 ...
- 《Java实验四》
//实验4--附录一代码 public class PassValueTest { //静态代码块,类一加载就执行的部分. //所以运行这个程序会输出 class loding static { Sy ...
- loaderexceptions
前段时间遇到一个问题 从容器中取数据时老报一个“无法加载一个或多个请求,请检索loaderexceptions” 真心是不晓得什么问题 以前经常这么用没有问题的 这个是在网站下引用了别的已经编译好的别 ...
- 黑马程序员——【Java基础】——Java概述
---------- android培训.java培训.期待与您交流! ---------- 一.Java语言概述及三大技术架构 1.Java语言概述 Java是SUN公司于1995年推出的一种面向I ...
- 20145210 《Java程序设计》第08周学习总结
第十四章 NIO与NIO2 14.1 认识NIO •NIO概述 •NIO使用频道来衔接数据结点 •在处理数据时,NIO可以让你设定缓冲区容量 •Channel架构与操作 •isOpen():确认Cha ...
- Finding Nemo_BFS
Description Nemo is a naughty boy. One day he went into the deep sea all by himself. Unfortunately, ...