xxxxxxxxxx
127
var from_point = 1;
var W = [[0, 3, Infinity, Infinity, Infinity, 2],
[3, 0, 4, 5, 6, 7],
[Infinity, 4, 0, 1, Infinity, Infinity],
[Infinity, 5, 1, 0, 2, Infinity],
[Infinity, 6, Infinity, 2, 0, 1],
[2, 7, Infinity, Infinity, 1, 0]];
var n = W.length;
var r = 200;
var a = [];
var b = [];
var c = [];
var pos = [];
var posP = [];
function setup() {
// createCanvas(600, 600);
createCanvas(windowWidth, windowHeight);
translate(width/2, height/2);
for (let i = 0; i < n; i++)
{
a[i] = false;
b[i] = W[from_point][i];
c[i] = from_point;
}
a[from_point] = true;
for (let i = 0; i < n; i++)
{
pos.push(createVector(cos(i * 2 * PI / n) * r, sin(i * 2 * PI / n) * r));
posP.push(createVector(pos[i].x * 1.4, pos[i].y * 1.4));
}
ReDraw();
}
function sign(n)
{
if (n == 0) return 0;
return (n > 0) ? 1 : -1;
}
function ReDraw()
{
background(51);
textSize(30);
textAlign(CENTER, CENTER);
stroke(255, 0, 105);
strokeWeight(2);
for (let i = 0; i < n; i++)
for (let j = i; j < n; j++)
if(W[i][j] != Infinity && i != j)
{
line(pos[i].x, pos[i].y, pos[j].x, pos[j].y);
push();
let temp = createVector((pos[i].x + pos[j].x)/2, (pos[i].y + pos[j].y)/2);
let ang = temp.heading();
if (abs(temp.x) < 1e-10 && abs(temp.y) < 1e-10) translate(16, -8);
else translate(temp.x *1.18, temp.y*1.18);
rotate(ang - sign(ang) * PI / 2);
text(W[i][j], 0, 0);
pop();
}
noStroke();
for (let i = 0; i < n; i++)
{
fill(33);
ellipse(pos[i].x, pos[i].y, 64, 64);
fill(235);
ellipse(posP[i].x, posP[i].y, 64, 64);
text(i + 1, pos[i].x, pos[i].y);
fill(33);
if (b[i] == Infinity) text('∞', posP[i].x, posP[i].y);
else text(b[i], posP[i].x, posP[i].y);
}
}
function minIndex()
{
let highest = Infinity;
let index;
for (let i = 0; i < W.length; i++)
if (highest > b[i] && !a[i])
{
highest = b[i];
index = i;
}
return index;
}
var step = 0;
var iteration = 0;
var ind;
function mousePressed()
{
switch(step % 2)
{
case 0:
{
ind = minIndex();
a[ind] = 1;
fill(105, 0, 205);
ellipse(pos[ind].x, pos[ind].y, 64, 64);
fill(235);
text(ind + 1, pos[ind].x, pos[ind].y);
step++;
} break;
case 1:
{
} break;
}
}