mirror of
https://github.com/UnickSoft/graphonline.git
synced 2025-07-03 08:15:38 +00:00
Fix coloring for tree.
This commit is contained in:
parent
e5ba1c5b62
commit
9c28729319
@ -53,6 +53,7 @@ Coloring.prototype.calculate = function(fillUpText = false)
|
|||||||
var listOfOrders = [];
|
var listOfOrders = [];
|
||||||
this.addSimpleAndRandomOrders(listOfOrders);
|
this.addSimpleAndRandomOrders(listOfOrders);
|
||||||
this.addBasedOnDegree(listOfOrders, connectedVertex);
|
this.addBasedOnDegree(listOfOrders, connectedVertex);
|
||||||
|
this.addForTree(listOfOrders, connectedVertex);
|
||||||
|
|
||||||
this.connectedComponentNumber = this.MaxColor;
|
this.connectedComponentNumber = this.MaxColor;
|
||||||
|
|
||||||
@ -200,6 +201,152 @@ Coloring.prototype.addBasedOnDegree = function(listOfOrders, connectedVertex)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Coloring.prototype.addForTree = function(listOfOrders, connectedVertex)
|
||||||
|
{
|
||||||
|
var vertexDegree = [];
|
||||||
|
var idToIndex = {};
|
||||||
|
var idToDegree = {};
|
||||||
|
for (var i = 0; i < this.graph.vertices.length; i++)
|
||||||
|
{
|
||||||
|
var degree = 0;
|
||||||
|
var id = this.graph.vertices[i].id;
|
||||||
|
if (id in connectedVertex)
|
||||||
|
{
|
||||||
|
degree = connectedVertex[id].length;
|
||||||
|
}
|
||||||
|
|
||||||
|
vertexDegree.push({index : i, degree : degree});
|
||||||
|
idToIndex[id] = i;
|
||||||
|
idToDegree[id] = degree;
|
||||||
|
}
|
||||||
|
|
||||||
|
// sort
|
||||||
|
vertexDegree.sort(
|
||||||
|
function(a, b) {
|
||||||
|
return (a.degree > b.degree) ? -1 :
|
||||||
|
((b.degree > a.degree) ? 1 : 0);
|
||||||
|
});
|
||||||
|
|
||||||
|
var vertexDegreeOrder = [];
|
||||||
|
for (var i = 0; i < vertexDegree.length; i++)
|
||||||
|
{
|
||||||
|
vertexDegreeOrder.push(vertexDegree[i].index);
|
||||||
|
}
|
||||||
|
|
||||||
|
{
|
||||||
|
var wasAdded = {};
|
||||||
|
var resSimple = [];
|
||||||
|
|
||||||
|
//------ simple near ------
|
||||||
|
for (var i = 0; i < vertexDegreeOrder.length; i++)
|
||||||
|
{
|
||||||
|
var vertex = this.graph.vertices[vertexDegreeOrder[i]].id;
|
||||||
|
if (!(vertex in wasAdded))
|
||||||
|
{
|
||||||
|
wasAdded[vertex] = 1;
|
||||||
|
resSimple.push(idToIndex[vertex]);
|
||||||
|
|
||||||
|
var queue = [];
|
||||||
|
queue.push(vertex);
|
||||||
|
|
||||||
|
while (true)
|
||||||
|
{
|
||||||
|
var needBreak = true;
|
||||||
|
for (var j = 0; j < queue.length; j++)
|
||||||
|
{
|
||||||
|
var vertexId = queue[j];
|
||||||
|
if (vertexId in connectedVertex)
|
||||||
|
{
|
||||||
|
for (var k = 0; k < connectedVertex[vertexId].length; k++)
|
||||||
|
{
|
||||||
|
if (!(connectedVertex[vertexId][k].id in wasAdded))
|
||||||
|
{
|
||||||
|
var id = connectedVertex[vertexId][k].id;
|
||||||
|
wasAdded[id] = 1;
|
||||||
|
queue.push(id);
|
||||||
|
resSimple.push(idToIndex[id]);
|
||||||
|
needBreak = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (needBreak)
|
||||||
|
{
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
listOfOrders.push(resSimple);
|
||||||
|
}
|
||||||
|
//-------------------------------
|
||||||
|
|
||||||
|
|
||||||
|
//------ simple near with max degree
|
||||||
|
{
|
||||||
|
var wasAdded = {};
|
||||||
|
var resMaxDegree = [];
|
||||||
|
for (var i = 0; i < vertexDegreeOrder.length; i++)
|
||||||
|
{
|
||||||
|
var vertex = this.graph.vertices[vertexDegreeOrder[i]].id;
|
||||||
|
if (!(vertex in wasAdded))
|
||||||
|
{
|
||||||
|
wasAdded[vertex] = 1;
|
||||||
|
resMaxDegree.push(idToIndex[vertex]);
|
||||||
|
|
||||||
|
var queue = [];
|
||||||
|
queue.push(vertex);
|
||||||
|
|
||||||
|
while (true)
|
||||||
|
{
|
||||||
|
var needBreak = true;
|
||||||
|
for (var j = 0; j < queue.length; j++)
|
||||||
|
{
|
||||||
|
var vertexId = queue[j];
|
||||||
|
if (vertexId in connectedVertex)
|
||||||
|
{
|
||||||
|
var maxDegree = -1;
|
||||||
|
var vertexMaxId = -1;
|
||||||
|
|
||||||
|
for (var k = 0; k < connectedVertex[vertexId].length; k++)
|
||||||
|
{
|
||||||
|
if (!(connectedVertex[vertexId][k].id in wasAdded))
|
||||||
|
{
|
||||||
|
var id = connectedVertex[vertexId][k].id;
|
||||||
|
|
||||||
|
if (idToDegree[id] > maxDegree)
|
||||||
|
{
|
||||||
|
maxDegree = idToDegree[id];
|
||||||
|
vertexMaxId = id;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (vertexMaxId >= 0)
|
||||||
|
{
|
||||||
|
wasAdded[vertexMaxId] = 1;
|
||||||
|
queue.push(vertexMaxId);
|
||||||
|
resMaxDegree.push(idToIndex[vertexMaxId]);
|
||||||
|
needBreak = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (needBreak)
|
||||||
|
{
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
listOfOrders.push(resMaxDegree);
|
||||||
|
}
|
||||||
|
//-------------------------------
|
||||||
|
}
|
||||||
|
|
||||||
Coloring.prototype.shuffleArray = function(a)
|
Coloring.prototype.shuffleArray = function(a)
|
||||||
{
|
{
|
||||||
var j, x, i;
|
var j, x, i;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user