import test from "ava"; import {Graph} from "../../src/lib/Graph-demo.js"; /** * @param g {Graph} * @param vertexOrder {array} * * */ function greedyColorArray(g, vertexOrder) { const color = new Map(); const usedNeighbourColors = []; color.set(vertexOrder[0], 0); for (const vertex of vertexOrder.slice(1)) { for(const nbr of g.adjacentOf(vertex)) { const colorOfNbr = color.get(nbr); if (colorOfNbr >= 0) { usedNeighbourColors[colorOfNbr] = true; } } let count = 0; while( usedNeighbourColors[count] ) { count++; } color.set(vertex, count); for(const nbr of g.adjacentOf(vertex)) { const colorOfNbr = color.get(nbr); if(colorOfNbr >= 0) { usedNeighbourColors[colorOfNbr] = false; } } } return color; } test.skip("Color Graph Array: type 1", t => { const lect = new Graph(); lect.addEdge(0, 1).addEdge(0, 2).addEdge(0, 3) .addEdge(1, 2).addEdge(1, 4) .addEdge(2, 5) .addEdge(3, 4).addEdge(3, 5) .addEdge(4, 5); console.log(lect); const vertices = [0, 1, 2, 3, 4, 5]; const color = greedyColorArray(lect, vertices); console.log(color); vertices = [0, 3, 4, 1, 5, 2]; color = greedyColorArray(lect, vertices); console.log(color); }); test.skip("Color Graph Array: type bi-party", t => { let lect = new Graph(); lect.addEdge(1, 2).addEdge(1, 6) .addEdge(4, 3).addEdge(4, 6) .addEdge(5, 2).addEdge(5,3).addEdge(5, 6); console.log(lect); let vertices = [1, 2, 3, 4, 5, 6]; let color = greedyColorArray(lect, vertices); console.log(color); vertices = [1, 4, 5, 2, 3, 6]; color = greedyColorArray(lect, vertices); console.log(color); }); // Set-Variant function firstAvailable(colorList) { let colorSet = new Set(colorList); let count = 0; while (true) { if (!colorSet.has(count)) { return count; } count++; } } function greedyColorSet(g, vertexOrder) { let color = new Map(); for (let vertex of vertexOrder) { let usedNeighbourColor = []; for(let nbr of g.adjacentOf(vertex)) { if (color.has(nbr)) { usedNeighbourColor.push(color.get(nbr)) } } color.set(vertex, firstAvailable(usedNeighbourColor) ); } return color; } test("Color Graph Set: type 1", t => { let lect = new Graph(); lect.addEdge(0, 1).addEdge(0, 2).addEdge(0, 3) .addEdge(1, 2).addEdge(1, 4) .addEdge(2, 5) .addEdge(3, 4).addEdge(3, 5) .addEdge(4, 5); console.log(lect); let vertices = [0, 1, 2, 3, 5, 4]; let color = greedyColorSet(lect, vertices); console.log(color); //vertices = [0, 3, 4, 1, 5, 2]; //color = greedyColorSet(lect, vertices); //console.log(color); }); test.skip("Color Graph Set: type bi-party", t => { let lect = new Graph(); lect.addEdge(1, 2).addEdge(1, 6) .addEdge(4, 3).addEdge(4, 6) .addEdge(5, 2).addEdge(5,3).addEdge(5, 6); console.log(lect); let vertices = [1, 2, 3, 4, 5, 6]; let color = greedyColorSet(lect, vertices); console.log(color); vertices = [1, 4, 5, 2, 3, 6]; color = greedyColorSet(lect, vertices); console.log(color); });