gramoloss
Version:
Graph theory package for edition and computation
174 lines (173 loc) • 8.13 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
const isTournamentLight_1 = require("../algorithms/isTournamentLight");
const graph_abstract_1 = require("../graph_abstract");
const link_1 = require("../link");
{
// const g = new AbstractGraph();
// for (let i =0; i < 5; i ++){
// g.addVertex();
// }
// g.addLink(0,1, ORIENTATION.DIRECTED, undefined)
// g.addLink(1,2, ORIENTATION.DIRECTED, undefined)
// g.addLink(1,3, ORIENTATION.DIRECTED, undefined)
// g.addLink(1,4, ORIENTATION.DIRECTED, undefined)
// g.addLink(4,0, ORIENTATION.DIRECTED, undefined)
// g.addLink(3,0, ORIENTATION.DIRECTED, undefined)
// g.addLink(2,0, ORIENTATION.DIRECTED, undefined)
// g.addLink(4,2, ORIENTATION.DIRECTED, undefined)
// console.log(hasLightTournamentExtension(g))
}
if (false) {
const g = new graph_abstract_1.AbstractGraph();
for (let i = 0; i < 12; i++) {
g.addVertex();
}
for (let i = 0; i < 9; i++) {
if (i % 3 == 0) {
g.addLink(i, (i + 1) % 9, link_1.ORIENTATION.DIRECTED, undefined);
g.addLink(i, (i + 2) % 9, link_1.ORIENTATION.DIRECTED, undefined);
g.addLink(i, (i + 3) % 9, link_1.ORIENTATION.DIRECTED, undefined);
g.addLink(i, (i + 4) % 9, link_1.ORIENTATION.DIRECTED, undefined);
}
else if (i % 3 == 1) {
g.addLink(i, (i + 1) % 9, link_1.ORIENTATION.DIRECTED, undefined);
g.addLink(i, (i + 2) % 9, link_1.ORIENTATION.DIRECTED, undefined);
g.addLink(i, (i + 6) % 9, link_1.ORIENTATION.DIRECTED, undefined);
}
else if (i % 3 == 2) {
g.addLink(i, (i + 1) % 9, link_1.ORIENTATION.DIRECTED, undefined);
g.addLink(i, (i + 2) % 9, link_1.ORIENTATION.DIRECTED, undefined);
g.addLink(i, (i + 3) % 9, link_1.ORIENTATION.DIRECTED, undefined);
g.addLink(i, (i + 4) % 9, link_1.ORIENTATION.DIRECTED, undefined);
g.addLink(i, (i + 5) % 9, link_1.ORIENTATION.DIRECTED, undefined);
}
}
g.addLink(0, 9, link_1.ORIENTATION.DIRECTED, undefined);
g.addLink(9, 3, link_1.ORIENTATION.DIRECTED, undefined);
g.addLink(9, 1, link_1.ORIENTATION.DIRECTED, undefined);
g.addLink(2, 9, link_1.ORIENTATION.DIRECTED, undefined);
g.addLink(3, 10, link_1.ORIENTATION.DIRECTED, undefined);
g.addLink(10, 6, link_1.ORIENTATION.DIRECTED, undefined);
g.addLink(10, 4, link_1.ORIENTATION.DIRECTED, undefined);
g.addLink(5, 10, link_1.ORIENTATION.DIRECTED, undefined);
g.addLink(6, 11, link_1.ORIENTATION.DIRECTED, undefined);
g.addLink(11, 7, link_1.ORIENTATION.DIRECTED, undefined);
g.addLink(8, 11, link_1.ORIENTATION.DIRECTED, undefined);
g.addLink(11, 0, link_1.ORIENTATION.DIRECTED, undefined);
const [b, done] = (0, isTournamentLight_1.hasLightTournamentExtension)(g);
console.log(b);
console.log(done.length);
for (const [u, v, dir] of done) {
if (dir == false) {
g.addLink(u, v, link_1.ORIENTATION.DIRECTED, undefined);
}
else {
g.addLink(v, u, link_1.ORIENTATION.DIRECTED, undefined);
}
}
console.log(g.isTournamentLight());
console.log(g.dichromaticNumber());
}
// Ring with k groups
if (false) {
const g = new graph_abstract_1.AbstractGraph();
const k = 4;
const n = 4 * k;
for (let i = 0; i < n; i++) {
g.addVertex();
}
for (let i = 0; i < n; i++) {
if (i % 4 == 0) {
g.addLink(i, (i + 1) % n, link_1.ORIENTATION.DIRECTED, undefined);
g.addLink(i, (i + 2) % n, link_1.ORIENTATION.DIRECTED, undefined);
g.addLink(i, (i + 3) % n, link_1.ORIENTATION.DIRECTED, undefined);
g.addLink(i, (i + 4) % n, link_1.ORIENTATION.DIRECTED, undefined);
g.addLink(i, (i + 5) % n, link_1.ORIENTATION.DIRECTED, undefined);
g.addLink((i + 6) % n, i, link_1.ORIENTATION.DIRECTED, undefined); // by minimality of the ring
// ---- NOT NECESSARY
// g.addLink(i, (i+7)%n, ORIENTATION.DIRECTED, undefined);
// g.addLink(i, (i+8)%n, ORIENTATION.DIRECTED, undefined);
// g.addLink((i+7)%n, (i+1)%n, ORIENTATION.DIRECTED, undefined);
// g.addLink((i+2)%n, (i+7)%n, ORIENTATION.DIRECTED, undefined);
// g.addLink((i+3)%n, (i+6)%n, ORIENTATION.DIRECTED, undefined);
// g.addLink((i+2)%n, (i+6)%n, ORIENTATION.DIRECTED, undefined);
// g.addLink((i+6)%n, (i+1)%n, ORIENTATION.DIRECTED, undefined);
// make 4i vertices a Paley
// g.addLink(i, (i+4*2)%n, ORIENTATION.DIRECTED, undefined);
// g.addLink(i, (i+4*4)%n, ORIENTATION.DIRECTED, undefined);
// g.addLink((i+1)%n, (i+1+4*1)%n, ORIENTATION.DIRECTED, undefined);
// g.addLink((i+1)%n, (i+1+4*2)%n, ORIENTATION.DIRECTED, undefined);
// g.addLink((i+1)%n, (i+1+4*3)%n, ORIENTATION.DIRECTED, undefined);
// g.addLink((i+2)%n, (i+2+4*1)%n, ORIENTATION.DIRECTED, undefined);
// g.addLink((i+2)%n, (i+2+4*2)%n, ORIENTATION.DIRECTED, undefined);
// g.addLink((i+2)%n, (i+2+4*3)%n, ORIENTATION.DIRECTED, undefined);
// g.addLink((i+3)%n, (i+3+4*1)%n, ORIENTATION.DIRECTED, undefined);
// g.addLink((i+3)%n, (i+3+4*2)%n, ORIENTATION.DIRECTED, undefined);
// g.addLink((i+3)%n, (i+3+4*3)%n, ORIENTATION.DIRECTED, undefined);
// -------
g.addLink((i + 1) % n, (i + 4) % n, link_1.ORIENTATION.DIRECTED, undefined);
g.addLink((i + 2) % n, (i + 4) % n, link_1.ORIENTATION.DIRECTED, undefined);
g.addLink((i + 3) % n, (i + 4) % n, link_1.ORIENTATION.DIRECTED, undefined);
g.addLink((i + 1) % n, (i + 2) % n, link_1.ORIENTATION.DIRECTED, undefined);
g.addLink((i + 2) % n, (i + 3) % n, link_1.ORIENTATION.DIRECTED, undefined);
g.addLink((i + 3) % n, (i + 1) % n, link_1.ORIENTATION.DIRECTED, undefined);
}
}
console.log("nb arcs", g.links.size);
const [b, done] = (0, isTournamentLight_1.hasLightTournamentExtension2)(g);
console.log("n=", g.vertices.size);
console.log("m=", g.links.size);
console.log(b);
console.log(done.length);
for (const [u, v, dir, deductions, isDeduced] of done) {
if (dir == false) {
g.addLink(u, v, link_1.ORIENTATION.DIRECTED, undefined);
}
else {
g.addLink(v, u, link_1.ORIENTATION.DIRECTED, undefined);
}
for (const [a, b] of deductions) {
g.addLink(a, b, link_1.ORIENTATION.DIRECTED, undefined);
}
}
console.log(g.links.size);
console.log(g.isTournamentLight());
console.log(g.dichromaticNumber());
console.log(g.minimumProperDicoloring());
}
if (true) {
console.log("Paley extension");
const g = new graph_abstract_1.AbstractGraph();
const n = 7;
for (let i = 0; i < n; i++) {
g.addVertex();
}
for (let i = 0; i < n; i++) {
g.addLink(i, (i + 1) % n, link_1.ORIENTATION.DIRECTED, undefined);
g.addLink(i, (i + 2) % n, link_1.ORIENTATION.DIRECTED, undefined);
g.addLink(i, (i + 4) % n, link_1.ORIENTATION.DIRECTED, undefined);
}
g.addVertex();
g.addLink(0, 7, link_1.ORIENTATION.DIRECTED, undefined);
g.addLink(7, 1, link_1.ORIENTATION.DIRECTED, undefined);
console.log("nb arcs", g.links.size);
const [b, done] = (0, isTournamentLight_1.hasLightTournamentExtension)(g);
console.log("n=", g.vertices.size);
console.log("m=", g.links.size);
console.log(b);
console.log(done.length);
console.log(done);
for (const [u, v, dir] of done) {
if (dir == false) {
g.addLink(u, v, link_1.ORIENTATION.DIRECTED, undefined);
}
else {
g.addLink(v, u, link_1.ORIENTATION.DIRECTED, undefined);
}
}
console.log(g.links.size);
console.log(g.isTournamentLight());
console.log(g.dichromaticNumber());
console.log(g.minimumProperDicoloring());
}