Assignment 14
by Ebony McCoy
HTML
<input type="button" onclick="createGraph();" value="Create Graph" />
<br/>
<br/> Select two nodes:
<br />From
<select id="from"></select> To
<select id="to"></select>
<input type="button" onclick="calculate();" value="Calculate" />
<br/>
<p id="nodes"></p>
<br/>
<p id="edges"></p>
<br/>
<br/>
<p id="results"></p>
JavaScript
// This is a basic implementation of a Graph
// It has nodes and edges
// I am using a stack (array in Javascript) to hold info
var Node = function(_name) {
this.name = _name;
this.edges = [];
this.graph = false;
return this;
}
var Edge = function(_from, _to, _cost) {
this.from = _from;
this.to = _to;
this.cost = _cost;
return this;
}
var Graph = function() {
// This is a specific implementation of a graph
// that uses nodes edges and paths. There are many
// more ways to implement a graph and you should
// research them
this.nodes = [];
this.edges = [];
this.paths = [];
this.addNode = function(_name) {
var node = new Node(_name);
this.nodes.push(node);
return node;
};
this.addEdge = function(_from, _to, _cost) {
var edge1 = new Edge(_from, _to, _cost);
var edge2 = new Edge(_to, _from, _cost);
//edge.from = _from;
//edge.to = _to;
this.edges.push(edge1);
// In this implementation of a graph the nodes also
// keep a collection of edges. For many traversal algorithms
// you will need this and should it the edge collection
// to your nodes here.
//edge.cost = _cost;
_from.edges.push(edge1);
_to.edges.push(edge2);
return edge1;
};
this.printNodes = function() {
var s = "All Nodes in Graph <br/>";
for (var i = 0; i < this.nodes.length; i++) {
s = s + "Node: " + i + " Name: " + this.nodes[i].name + "</br>";
}
return s;
}
this.printEdges = function() {
var s = "All Edges in Graph <br/>";
for (var i = 0; i < this.edges.length; i++) {
s += "Edge: " + i + " From: " + this.edges[i].from.name + " To: " + this.edges[i].to.name + " Cost: " + this.edges[i].cost + "</br>";
}
return s;
}
// Must implement
this.calculatePaths = function(_from, _to) {
this.reset();
var fromNode = this.getNodeByName(_from);
var toNode = this.getNodeByName(_to);
var dPath = [];
dPath =...