var max = 1000000;
var pointSet = [];
var distance = [
[0, 4, 7, max, max],
[4, 0, 8, 6, max],
[7, 8, 0, 5, max],
[max, 6, 5, 0, 7],
[max, max, max, 7, 0]
];
function Node(value) {
this.value = value;
this.neighbor = [];
}
var a = new Node("A");
var b = new Node("B");
var c = new Node("C");
var d = new Node("D");
var e = new Node("E");
pointSet.push(a);
pointSet.push(b);
pointSet.push(c);
pointSet.push(d);
pointSet.push(e);
function getIndex(str) {
for (var i = 0 ; i < pointSet.length ; i ++) {
if (str == pointSet[i].value) return i;
}
return -1;
}
function getMinDisNode(pointSet, distance, nowPointSet) {
var fromNode = null;
var minDisNode = null;
var minDis = max;
for (var i = 0 ; i < nowPointSet.length ; i ++) {
var nowPointIndex = getIndex(nowPointSet[i].value);
for (var j = 0 ; j < distance[nowPointIndex].length ; j ++) {
var thisNode = pointSet[j];
if (nowPointSet.indexOf(thisNode) < 0
&& distance[nowPointIndex][j] < minDis) {
fromNode = nowPointSet[i];
minDisNode = thisNode;
minDis = distance[nowPointIndex][j];
}
}
}
fromNode.neighbor.push(minDisNode);
minDisNode.neighbor.push(fromNode);
return minDisNode;
}
function prim(pointSet, distance, start) {
var nowPointSet = [];
nowPointSet.push(start);
while (true) {
var minDisNode = getMinDisNode(pointSet, distance, nowPointSet);
nowPointSet.push(minDisNode);
if (nowPointSet.length == pointSet.length) {
break;
}
}
}
prim(pointSet, distance, pointSet[2]);
console.log(pointSet);