Skip to content

Commit 3f1c516

Browse files
committed
Fikset knapper, harcodet grafer, enchancement++
1 parent 3c78141 commit 3f1c516

18 files changed

+1012
-287
lines changed

Kruskal/css/style.css

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -78,7 +78,7 @@ div#queueUI {
7878
width: 100px;
7979
}
8080

81-
.my-button:hover {
81+
.my-button:hover:not([disabled]) {
8282
background: -webkit-gradient(linear, left top, left bottom, color-stop(0.05, #1e62d0), color-stop(1, #3d94f6));
8383
background: -moz-linear-gradient(top, #1e62d0 5%, #3d94f6 100%);
8484
background: -webkit-linear-gradient(top, #1e62d0 5%, #3d94f6 100%);
@@ -125,7 +125,8 @@ div.nodeUI {
125125
}
126126

127127
div.nodeUI.selected {
128-
background-color: rgb(255, 189, 59);
128+
/* background-color: rgb(255, 189, 59); */
129+
border-color: #3adb04;
129130
}
130131

131132
div.nodeUI p {

Kruskal/index.html

Lines changed: 21 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -8,29 +8,40 @@
88
<script src="js/bootstrap.min.js"></script>
99
<script src="js/Methods.js"></script>
1010
<script src="js/View.js"></script>
11-
<script src="js/graphController.js"></script>
12-
<script src="Bjs/EventManager.js"></script>
11+
<script src="js/Controller.js"></script>
12+
<script src="js/EventManager.js"></script>
1313
<script src="js/KruskalAlgorithm.js"></script>
14+
<script src="js/exampleGraphs.js"></script>
1415
<meta name="viewport" content="width=device-width, initial-scale=1">
1516

1617
</head>
1718

1819
<body>
19-
<script src="js/graphUI.js"></script>
20+
<h1 id="headerText">Kruskal's Algorithm</h1>
21+
<script src="js/graphUI.js"></script>
2022

2123
<div id="graphUI" class="main-container kruskal">
2224
<svg id="edgeSvg" height="100%" width="100%"></svg>
2325
</div>
24-
26+
<script>graph3();</script>
2527
<div id="buttonDiv" class="bottom-container left-bottom">
2628
<!-- Testing: Creating a already defined graph -->
27-
<button id="kruskal" class="my-button" onclick="manager.start()">Start</button>
28-
<button id="graph" class="my-button" onclick="highlightMe();">Highlight</button>
29-
<button id="prev" class="my-button" onclick="manager.previous();">Previous</button>
30-
<button id="next" class="my-button" onclick="manager.next();">Next</button>
31-
<button id="reset" class="my-button" onclick="resetGraph();">Reset</button>
29+
<button id="start" class="my-button"
30+
onclick="startKruskal(); manager.start();">Start</button>
31+
<button id="togglePause" class="my-button" onclick="viewer.pause()">Pause</button>
32+
<button id="prev" class="my-button" onclick="viewer.backward();">Previous</button>
33+
<button id="next" class="my-button" onclick="viewer.forward();">Next</button>
34+
<select id="nodes" onchange="numberOfNodes(value)">
35+
<option value="3">3</option>
36+
<option value="4">4</option>
37+
<option value="5">5</option>
38+
<option value="6">6</option>
39+
<option value="7">7</option>
40+
<option value="8">8</option>
41+
<option value="9">9</option>
42+
<option value="10">10</option>
43+
</select>
3244
</div>
3345

34-
<script>startKruskal(0);</script>
3546
</body>
3647
</html>

Kruskal/js/Controller.js

Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
/**
2+
* File created by Philip Hoang 21.03.2018
3+
*/
4+
///<reference path="graphUI.ts"/>
5+
///<reference path="View.ts"/>
6+
///<reference path="KruskalAlgorithm.ts"/>
7+
///<reference path="View.ts"/>
8+
///<reference path="EventManager.ts"/>
9+
///<reference path="Methods.ts"/>
10+
var Controller = /** @class */ (function () {
11+
function Controller() {
12+
}
13+
Controller.prototype.addNode = function (x, y) {
14+
viewer.addNodeToGraph(x, y);
15+
};
16+
Controller.prototype.connectTwoNodes = function (node1, node2) {
17+
viewer.connectTheseNodes(node1, node2);
18+
};
19+
Controller.prototype.resetGraph = function () {
20+
viewer.resetAll();
21+
};
22+
Controller.prototype.highlightMyEdge = function (edgeId) {
23+
viewer.setHighlightEdge(edgeId);
24+
};
25+
Controller.prototype.dehighlightMyEdge = function (edgeId) {
26+
viewer.setDehighlightEdge(edgeId);
27+
};
28+
Controller.prototype.removeMyEdge = function (edgeId) {
29+
viewer.removeEdge(edgeId);
30+
};
31+
Controller.prototype.transparentMyEdge = function (edgeId) {
32+
viewer.transparentEdge(edgeId);
33+
};
34+
Controller.prototype.detransparentMyEdge = function (edgeId) {
35+
viewer.transparentEdge(edgeId);
36+
};
37+
Controller.prototype.selectTwoNodes = function (node1, node2) {
38+
viewer.selectTheseNodes(node1, node2);
39+
};
40+
Controller.prototype.deselectTwoNodes = function (node1, node2) {
41+
viewer.deselectTheseNodes(node1, node2);
42+
};
43+
Controller.prototype.disableStartButton = function () {
44+
viewer.disableThisButton();
45+
};
46+
Controller.prototype.enableStartButtion = function () {
47+
viewer.enableThisButton();
48+
};
49+
return Controller;
50+
}());
51+
var controller = new Controller();

Kruskal/js/Controller.ts

Lines changed: 64 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,64 @@
1+
/**
2+
* File created by Philip Hoang 21.03.2018
3+
*/
4+
5+
///<reference path="graphUI.ts"/>
6+
///<reference path="View.ts"/>
7+
///<reference path="KruskalAlgorithm.ts"/>
8+
///<reference path="View.ts"/>
9+
///<reference path="EventManager.ts"/>
10+
///<reference path="Methods.ts"/>
11+
12+
class Controller {
13+
addNode(x: number, y: number) {
14+
viewer.addNodeToGraph(x, y);
15+
}
16+
17+
connectTwoNodes(node1: number, node2: number) {
18+
viewer.connectTheseNodes(node1, node2);
19+
}
20+
21+
resetGraph() {
22+
viewer.resetAll();
23+
}
24+
25+
highlightMyEdge(edgeId: number) {
26+
viewer.setHighlightEdge(edgeId);
27+
}
28+
29+
dehighlightMyEdge(edgeId: number) {
30+
viewer.setDehighlightEdge(edgeId);
31+
}
32+
33+
removeMyEdge(edgeId: number) {
34+
viewer.removeEdge(edgeId);
35+
}
36+
37+
transparentMyEdge(edgeId: number) {
38+
viewer.transparentEdge(edgeId);
39+
}
40+
41+
detransparentMyEdge(edgeId: number) {
42+
viewer.transparentEdge(edgeId);
43+
}
44+
45+
selectTwoNodes(node1: number, node2: number) {
46+
viewer.selectTheseNodes(node1, node2);
47+
}
48+
49+
deselectTwoNodes(node1: number, node2: number){
50+
viewer.deselectTheseNodes(node1, node2);
51+
52+
}
53+
54+
disableStartButton() {
55+
viewer.disableThisButton();
56+
}
57+
58+
enableStartButtion() {
59+
viewer.enableThisButton();
60+
}
61+
}
62+
63+
var controller: Controller = new Controller();
64+

Kruskal/js/EventManager.js

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,11 @@
1-
"use strict";
21
/**
32
* Created by knutandersstokke on 16.10.2016.
43
*
54
*/
65
/** Manager for events stored in queue. Manager is also responsible for executing events automatically */
76
var EventManager = /** @class */ (function () {
87
function EventManager() {
9-
this.delayTime = 700; // Original value
8+
this.delayTime = 450; // Original value
109
this.nextEvents = [];
1110
this.previousEvents = [];
1211
}

Kruskal/js/EventManager.ts

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -7,10 +7,10 @@ declare var $ : any;
77

88
/** Manager for events stored in queue. Manager is also responsible for executing events automatically */
99
class EventManager {
10-
delayTime:number = 700; // Original value
11-
nextEvents:FrontendEvent[] = [];
12-
previousEvents:FrontendEvent[] = [];
13-
eventThread : number;
10+
delayTime: number = 450; // Original value
11+
nextEvents: FrontendEvent[] = [];
12+
previousEvents: FrontendEvent[] = [];
13+
eventThread: number;
1414

1515
// Executing the next event in the queue, adding it to 'previous'
1616
next() {
@@ -29,22 +29,22 @@ class EventManager {
2929
previous() {
3030
if (this.previousEvents.length == 0)
3131
return;
32-
var event :FrontendEvent = (<FrontendEvent>this.previousEvents.pop());
32+
var event: FrontendEvent = (<FrontendEvent>this.previousEvents.pop());
3333
//this.delayTime = 0; //TODO: Should there be a delay when stepping backwards?
3434
event.previous();
3535
this.nextEvents.unshift(event);
3636
}
3737

38-
addEvent(event : FrontendEvent) {
38+
addEvent(event: FrontendEvent) {
3939
this.nextEvents.push(event);
4040
}
4141

4242
start() {
4343
clearInterval(this.eventThread);
4444
var manager = this; // Anonymous functions cannot access this...
45-
this.eventThread = setInterval(function() {
45+
this.eventThread = setInterval(function () {
4646
manager.next();
47-
}, manager.delayTime);
47+
}, manager.delayTime);
4848
}
4949

5050
pause() {

Kruskal/js/KruskalAlgorithm.js

Lines changed: 28 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -1,77 +1,73 @@
1-
"use strict";
21
/**
32
* File created by Philip Hoang 21.03.18
43
*/
54
///<reference path="graphUI.ts"/>
6-
///<reference path="graphController.ts"/>
5+
///<reference path="Controller.ts"/>
76
///<reference path="EventManager.ts"/>
87
///<reference path="View.ts"/>
9-
var visited;
108
var arr = [];
119
var queue = [];
1210
var currentEdge = 0;
13-
/*
14-
let triplets: any[] = [];
15-
16-
triplets[0] = [1, "s", true];
17-
triplets[1] = ["t", 2, false];
18-
let [a, b, c] = triplets[0];
19-
20-
console.log(a + " " + b + " " + c);
21-
*/
2211
function startKruskal() {
23-
exampleGraph1();
12+
controller.disableStartButton();
2413
var edgeList = sortEdges();
2514
for (var i = 0; i < edgeList.length; i++) {
2615
arr[i] = i;
2716
}
2817
while (edgeList.length > 0) {
2918
var _a = edgeList.pop(), node1 = _a[0], node2 = _a[1], weight = _a[2];
3019
currentEdge = getEdgeId(node1, node2);
31-
controller.highlightMyEdge(currentEdge, true);
20+
controller.selectTwoNodes(node1, node2);
21+
controller.highlightMyEdge(currentEdge);
3222
if (connected(node1, node2) == false) {
3323
union(node1, node2);
34-
controller.highlightMyEdge(currentEdge, true);
3524
}
3625
else {
37-
controller.removeMyEdge(currentEdge);
26+
controller.dehighlightMyEdge(currentEdge);
27+
controller.transparentMyEdge(currentEdge);
3828
}
29+
controller.deselectTwoNodes(node1, node2);
3930
}
31+
arr = [];
32+
queue = [];
33+
currentEdge = 0;
34+
controller.enableStartButtion();
4035
}
41-
function simpleFind(index) {
36+
function find(index) {
4237
var root = index;
4338
while (root != arr[root]) {
4439
root = arr[root];
4540
}
4641
return root;
4742
}
4843
function connected(aIndex, bIndex) {
49-
var aRoot = simpleFind(aIndex);
50-
var bRoot = simpleFind(bIndex);
51-
console.log("a " + aRoot);
52-
console.log("b " + bRoot);
44+
var aRoot = find(aIndex);
45+
var bRoot = find(bIndex);
5346
var connected = (aRoot == bRoot);
54-
console.log(connected);
5547
return connected;
5648
}
5749
function union(aIndex, bIndex) {
58-
var aRoot = simpleFind(aIndex);
59-
var bRoot = simpleFind(bIndex);
50+
var aRoot = find(aIndex);
51+
var bRoot = find(bIndex);
6052
if (aRoot != bRoot) {
6153
arr[aRoot] = bRoot;
6254
}
6355
}
6456
function sortEdges() {
6557
var temp = 0;
6658
var sorted = triplets;
67-
for (var i = 0; i < sorted.length; i++) {
68-
for (var j = 0; j < sorted.length; j++) {
69-
var _a = sorted[i], a = _a[0], b = _a[1], c = _a[2];
70-
var _b = sorted[j], d = _b[0], e = _b[1], f = _b[2];
71-
if (c > f) {
72-
temp = sorted[i];
73-
sorted[i] = sorted[j];
74-
sorted[j] = temp;
59+
console.log(triplets);
60+
console.log(sorted);
61+
if (sorted.length > 0) {
62+
for (var i = 0; i < sorted.length; i++) {
63+
for (var j = 0; j < sorted.length; j++) {
64+
var _a = sorted[i], a = _a[0], b = _a[1], c = _a[2];
65+
var _b = sorted[j], d = _b[0], e = _b[1], f = _b[2];
66+
if (c > f) {
67+
temp = sorted[i];
68+
sorted[i] = sorted[j];
69+
sorted[j] = temp;
70+
}
7571
}
7672
}
7773
}

0 commit comments

Comments
 (0)