Skip to content

Commit 9ab7cc2

Browse files
Dijkstra Completed
1 parent 6321ecc commit 9ab7cc2

File tree

3 files changed

+123
-107
lines changed

3 files changed

+123
-107
lines changed

Dijkstra/sketch.js

+43-20
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,8 @@ var counter = 0;
44
var sel;
55
var start;
66
var current;
7-
var ind;
7+
// var ind;
8+
var index;
89
var INT_MAX = 1e18;
910
var queue = [];
1011
function setup() {
@@ -18,9 +19,9 @@ function setup() {
1819
button.mousePressed(() => {
1920
if (vertices.length == 0 || start) return;
2021
start = true;
21-
current = vertices[0];
22-
current.dist = 0;
23-
ind = 0;
22+
current = undefined
23+
vertices[0].dist = 0;
24+
index = 0;
2425
queue = [vertices[0]];
2526
// current = vertices[0];
2627
});
@@ -38,24 +39,46 @@ function draw() {
3839
queue.splice(i, 1);
3940
}
4041
}
41-
if (queue.length == 0) return;
42-
cur = findMin();
43-
cur.visited = true;
44-
cur.selected = true;
45-
cur.open = false;
46-
for (var index = 0; index<cur.adj.length; index++) {
47-
var e = cur.adj[index];
48-
if (e.dist > cur.dist + cur.weight[index] && !e.visited) {
49-
console.log(e);
50-
for (var v = 0; v < queue.length; v++) {
51-
if (queue[v] == e) {
52-
queue.splice(v, 1);
42+
if (!current || index == current.adj.length) {
43+
if (current) current.selected = false;
44+
if (queue.length == 0) {
45+
return;
46+
}
47+
current = cur = findMin();
48+
cur.visited = true;
49+
cur.selected = true;
50+
index = 0;
51+
}
52+
else {
53+
cur = current;
54+
for (; index < current.adj.length; index++) {
55+
var e = cur.adj[index];
56+
if (e.visited) continue;
57+
if (e.dist > cur.dist + cur.weight[index] || e.changed) {
58+
console.log(e.changed, e);
59+
60+
if (e.selected == false) {
61+
e.selected = true;
62+
}
63+
else if (e.changed == false) {
64+
for (var v = 0; v < queue.length; v++) {
65+
if (queue[v] == e) {
66+
queue.splice(v, 1);
67+
}
68+
}
69+
e.dist = cur.dist + cur.weight[index];
70+
queue.push(e);
71+
e.changed = true;
72+
e.selected = false;
73+
}
74+
else {
75+
76+
e.changeToFalse();
77+
e.selected = false;
78+
index+=1;
5379
}
80+
break;
5481
}
55-
e.dist = cur.dist + cur.weight[index];
56-
57-
queue.push(e);
58-
// e.open = true;
5982
}
6083
}
6184

Dijkstra/temp.js

+66-79
Original file line numberDiff line numberDiff line change
@@ -4,106 +4,90 @@ var counter = 0;
44
var sel;
55
var start;
66
var current;
7-
var ind = 0;
7+
// var ind;
8+
var index;
89
var INT_MAX = 1e18;
9-
var iter = 0;
10+
var queue = [];
1011
function setup() {
11-
var button = createButton("Start Dijsktra");
12-
// var resetButton = createButton("Reset");
13-
// var table = select("table");
14-
createCanvas(windowWidth - 100, windowHeight - 100);
15-
16-
// counter = 0;
17-
// sel = undefined;
18-
19-
// current = undefined;
20-
// start = false;
12+
createCanvas(1000, 1000)
13+
counter = 0;
14+
sel = undefined;
15+
var button = createButton("Start Dijkstra");
16+
var resetButton = createButton("Reset");
17+
current = undefined;
18+
start = false;
2119
button.mousePressed(() => {
2220
if (vertices.length == 0 || start) return;
2321
start = true;
2422
current = vertices[0];
2523
current.dist = 0;
26-
ind = 0;
24+
index = 0;
25+
queue = [vertices[0]];
26+
// current = vertices[0];
2727
});
2828

29-
// resetButton.mousePressed(() => {
30-
// start = false;
31-
// vertices = [];
32-
// sel = undefined;
33-
// current = undefined;
34-
// counter = 0;
35-
// });
29+
resetButton.mousePressed(() => {
30+
console.log("Not Implemented")
31+
});
3632
}
3733

3834
function draw() {
35+
var cur;
3936
if (start) {
40-
if (!current) {
41-
return;
37+
for (var i = queue.length - 1; i >= 0; i--) {
38+
if (queue[i].visited) {
39+
queue.splice(i, 1);
40+
}
4241
}
43-
iter += 1;
44-
if (iter == 3) {
45-
console.log(current.adj[ind]);
46-
noLoop();
47-
return;
42+
if (queue.length == 0) return;
43+
if (!current || index == current.adj.length) {
44+
if (current) current.selected = false;
45+
current = cur = findMin();
46+
cur.visited = true;
47+
cur.selected = true;
48+
index = 0;
4849
}
49-
current.visited = true;
50-
current.selected = true;
51-
if (ind != current.adj.length) {
52-
if (current.adj[ind].visited) {
53-
ind += 1;
54-
return;
55-
}
56-
console.log(iter, current.adj[ind], current, ind);
57-
58-
if (current.adj[ind].selected) {
59-
60-
current.adj[ind].selected = false;
61-
if (current.adj[ind].change == false) {
62-
// console.log(current.dist + current.weight[ind],vertices[ind].dist)
63-
if (current.dist + current.weight[ind] < current.adj[ind].dist) {
64-
// console.log(11111111111);
65-
// console.log(ind);
66-
current.adj[ind].dist = current.dist + current.weight[ind];
67-
current.adj[ind].change = true;
50+
else {
51+
cur = current;
52+
for (; index < current.adj.length; index++) {
53+
var e = cur.adj[index];
54+
if (e.visited) continue;
55+
if (e.dist > cur.dist + cur.weight[index]) {
56+
if (e.selected == false) {
57+
e.selected = true;
6858
}
69-
else ind += 1;
70-
}
71-
else {
72-
current.adj[ind].change = false;
73-
ind += 1;
59+
else if (e.change == false) {
60+
e.change = true;
61+
e.selected = false;
62+
}
63+
else {
64+
for (var v = 0; v < queue.length; v++) {
65+
if (queue[v] == e) {
66+
queue.splice(v, 1);
67+
}
68+
}
69+
e.dist = cur.dist + cur.weight[index];
70+
e.change = false;
71+
}
72+
// queue.push(e);
73+
break;
7474
}
7575
}
76-
else {
77-
current.adj[ind].selected = true;
78-
console.log("selecting",current.adj[ind]);
79-
80-
}
8176
}
82-
else {
83-
noLoop();
8477

85-
// current.selected = false;
86-
// var nextInd = findMin();
87-
// if (nextInd == undefined) {
88-
// console.log("Done");
89-
// current = undefined;
90-
// // start = false;
91-
// // noLoop();
92-
// }
93-
// var next = vertices[nextInd];
94-
// current = next;
95-
}
78+
9679
frameRate(1);
9780
}
9881
else frameRate(30);
99-
background(0);
100-
101-
vertices.forEach((e) => e.show());
102-
103-
if (current) { current.selected = false; }
82+
drawAll();
83+
if (cur) { cur.selected = false; }
10484

10585
}
10686

87+
function drawAll() {
88+
background(0);
89+
vertices.forEach((e) => e.show());
90+
}
10791
function intersect(x, y) {
10892
for (var i = 0; i < vertices.length; i++) {
10993
if (dist(vertices[i].pos.x, vertices[i].pos.y, x, y) + 30 <= vertices[i].r * 2) {
@@ -135,8 +119,9 @@ function intersect(x, y) {
135119
return false;
136120
}
137121
function mousePressed() {
122+
console.log(mouseX, mouseY);
138123
if (intersect(mouseX, mouseY)) {
139-
console.log("Already Present");
124+
console.log(true);
140125
return;
141126
};
142127
console.log(false);
@@ -148,11 +133,13 @@ function mousePressed() {
148133
function findMin() {
149134
var MIN = INT_MAX;
150135
var ind = undefined;
151-
for (var v = 0; v < vertices.length; v++) {
152-
if (vertices[v].visited == false && vertices[v].dist < MIN) {
153-
MIN = vertices[v].dist;
136+
for (var v = 0; v < queue.length; v++) {
137+
if (queue[v].visited == false && queue[v].dist < MIN) {
138+
MIN = queue[v].dist;
154139
ind = v;
155140
}
156141
}
157-
return ind;
142+
var res = queue[ind];
143+
queue.splice(ind, 1);
144+
return res;
158145
}

Dijkstra/vertex.js

+14-8
Original file line numberDiff line numberDiff line change
@@ -5,32 +5,37 @@ class Vertex {
55
this.pos = createVector(x, y);
66
this.visited = false;
77
this.complete = false;
8-
this.open = false;
98
this.r = 50;
109
this.selected = false;
1110
this.adj = [];
1211
this.weight = [];
1312
this.par = undefined;
1413
this.dist = INT_MAX; //inf
15-
this.change = false;
14+
this.changed = false;
15+
}
16+
changeToFalse(){
17+
this.changed = false;
1618
}
1719

1820
show() {
21+
push();
1922
// noStroke();
2023
stroke(255);
2124
strokeWeight(2);
22-
fill(0, 0);
25+
fill(0);
2326

24-
if (this.visited) {
25-
fill(100, 0, 0);
26-
}
27+
2728
if (this.selected) {
2829
fill(100, 0, 100);
2930
}
30-
if (this.open) {
31+
if (this.changed) {
3132
fill(0, 255, 0);
3233
}
3334

35+
if (this.visited) {
36+
fill(100, 0, 0);
37+
}
38+
3439
circle(this.pos.x, this.pos.y, this.r);
3540
fill(255);
3641
textSize(24);
@@ -73,7 +78,8 @@ class Vertex {
7378
ind += 1;
7479
// return tempV;
7580
// line(this.pos.x,this.pos,y,e.pos.x,e.pos.y);
76-
})
81+
});
82+
pop();
7783
}
7884

7985

0 commit comments

Comments
 (0)