thoughts or criticism anyone?
using System;
namespace Dijkstra
{
public class Algorithm
{
private const int nodes = 10;
private const int labels = 10;
/* this implementation of Dijkstra's Algorithm assumes a 10 x 10
reference matrix of labels (edge values) is provided */
private const int startNode = 1;
private const int endNode = 10;
/* a second assumption is point one is our starting or "vantage"
point
and point ten is our end point */
private const int infinity = 10000;
// value 10,000 represents no edge / link between nodes
private static int [,] refMatrix = new int[nodes, labels];
private static int [] distArray = new int [labels];
private static int [] prevArray = new int [nodes];
private static bool [] markedArray = new bool [nodes];
private static bool [] unmarkedArray = new bool [nodes];
private Algorithm()
{
}
public static void ImportRefMatrix()
{
string l_Filename = "..\\..\\Matrix.DAT";
refMatrix = Import.ContructMatrix(l_Filename);
}
public static void InitializeArrays()
{
int i = 0;
for(i = 0; i < labels; ++i)
{
distArray[i] = infinity;
// no path exists
}
for(i = 0; i < nodes; ++i)
{
prevArray[i] = 0;
// no nodes have predecessors
}
for(i = 0; i < nodes; ++i)
{
markedArray[i] = false;
unmarkedArray[i] = true;
}
markedArray[startNode - 1] = true;
unmarkedArray[startNode - 1] = false;
// starting point considered marked
// - 1 often used when dealing with array indexes (which begin at 0)
}
public static void Implement()
{
while(CountMarkedVertices() < nodes)
{
int closestVertex = SelectUnmarkedVertexClosestToSource(startNode);
markedArray[closestVertex - 1] = true;
unmarkedArray[closestVertex - 1] = false;
for(int i = 0; i < labels; ++i)
{
if(refMatrix[closestVertex - 1, i] < infinity)
// for each edge adjacent to closestVertex
{
if(refMatrix[startNode - 1, i] > refMatrix[startNode - 1,
closestVertex - 1] +
refMatrix[closestVertex - 1, i])
/* if distance from starting point to adjacent node exceeds
distance from
starting point to closestVertex plus distance from closestVertex
to adjacent
node */
{
refMatrix[startNode - 1, i] = refMatrix[startNode - 1,
closestVertex - 1] +
refMatrix[closestVertex - 1, i];
// update distance grid
prevArray[i] = closestVertex - 1;
}
}
}
}
}
public static int CountMarkedVertices()
{
int counter = 0;
for(int i = 0; i < nodes; ++i)
{
if(markedArray[i] == true) ++counter;
}
return counter;
}
public static int SelectUnmarkedVertexClosestToSource(int sourceNode)
{
int shortestDistanceToSource = infinity;
int closestVertex = 0;
for(int i = 0; i < nodes; ++i)
{
if(unmarkedArray[i] == true)
{
if(refMatrix[sourceNode - 1, i] < shortestDistanceToSource)
{
shortestDistanceToSource = refMatrix[sourceNode - 1, i];
closestVertex = i;
}
}
}
return ++closestVertex;
}
public static void ShowResults()
{
Console.Write("\nThe following chart shows all nodes on the
left.\n\nTheir precedessors " +
"are listed in the right column.\n\n'Prev' refers to 'previous' or
'preceding' node." +
"\n\n\n\n");
ShowArray("Prev");
}
public static void ShowArray(string arrayName)
{
switch(arrayName)
{
case "Prev":
Console.Write("Prev ");
break;
case "Marked":
Console.Write("Marked ");
break;
case "Unmarked":
Console.Write("Unmarked ");
break;
default:
Console.Write("Unknown array name.\n\n");
break;
}
Console.Write("Array\n--------------\n\n");
switch(arrayName)
{
case "Prev":
for(int i = 0; i < nodes; ++i)
{
Console.Write("Node {0}\t\t{1}\n", i + 1, prevArray[i] + 1);
}
break;
case "Marked":
for(int i = 0; i < nodes; ++i)
{
Console.Write("Node {0}\t\t{1}\n", i + 1, markedArray[i]);
}
break;
case "Unmarked":
for(int i = 0; i < nodes; ++i)
{
Console.Write("Node {0}\t\t{1}\n", i + 1, unmarkedArray[i]);
}
break;
default:
break;
}
Console.Write("\n\n");
}
}
} 5 2192
what is ur question, exactly?
--
Grace + Peace,
Peter N Roth
Engineering Objects International http://engineeringobjects.com
Home of Matrix.NET
<A_*********@hotmail.com> wrote in message
news:11*********************@o13g2000cwo.googlegro ups.com... thoughts or criticism anyone?
using System;
namespace Dijkstra { public class Algorithm { private const int nodes = 10; private const int labels = 10; /* this implementation of Dijkstra's Algorithm assumes a 10 x 10 reference matrix of labels (edge values) is provided */
private const int startNode = 1; private const int endNode = 10; /* a second assumption is point one is our starting or "vantage" point and point ten is our end point */
private const int infinity = 10000; // value 10,000 represents no edge / link between nodes
private static int [,] refMatrix = new int[nodes, labels]; private static int [] distArray = new int [labels]; private static int [] prevArray = new int [nodes]; private static bool [] markedArray = new bool [nodes]; private static bool [] unmarkedArray = new bool [nodes];
private Algorithm() { }
public static void ImportRefMatrix() { string l_Filename = "..\\..\\Matrix.DAT"; refMatrix = Import.ContructMatrix(l_Filename); }
public static void InitializeArrays() { int i = 0;
for(i = 0; i < labels; ++i) { distArray[i] = infinity; // no path exists
}
for(i = 0; i < nodes; ++i) { prevArray[i] = 0; // no nodes have predecessors
}
for(i = 0; i < nodes; ++i) { markedArray[i] = false; unmarkedArray[i] = true; }
markedArray[startNode - 1] = true; unmarkedArray[startNode - 1] = false; // starting point considered marked
// - 1 often used when dealing with array indexes (which begin at 0)
}
public static void Implement() {
while(CountMarkedVertices() < nodes) { int closestVertex = SelectUnmarkedVertexClosestToSource(startNode); markedArray[closestVertex - 1] = true; unmarkedArray[closestVertex - 1] = false;
for(int i = 0; i < labels; ++i) { if(refMatrix[closestVertex - 1, i] < infinity) // for each edge adjacent to closestVertex
{ if(refMatrix[startNode - 1, i] > refMatrix[startNode - 1, closestVertex - 1] + refMatrix[closestVertex - 1, i]) /* if distance from starting point to adjacent node exceeds distance from starting point to closestVertex plus distance from closestVertex to adjacent node */
{ refMatrix[startNode - 1, i] = refMatrix[startNode - 1, closestVertex - 1] + refMatrix[closestVertex - 1, i]; // update distance grid
prevArray[i] = closestVertex - 1; } } }
}
}
public static int CountMarkedVertices() { int counter = 0;
for(int i = 0; i < nodes; ++i) { if(markedArray[i] == true) ++counter; }
return counter; }
public static int SelectUnmarkedVertexClosestToSource(int sourceNode) { int shortestDistanceToSource = infinity; int closestVertex = 0;
for(int i = 0; i < nodes; ++i) { if(unmarkedArray[i] == true) { if(refMatrix[sourceNode - 1, i] < shortestDistanceToSource) { shortestDistanceToSource = refMatrix[sourceNode - 1, i]; closestVertex = i; } } }
return ++closestVertex; }
public static void ShowResults() { Console.Write("\nThe following chart shows all nodes on the left.\n\nTheir precedessors " + "are listed in the right column.\n\n'Prev' refers to 'previous' or 'preceding' node." + "\n\n\n\n"); ShowArray("Prev"); }
public static void ShowArray(string arrayName) {
switch(arrayName) { case "Prev": Console.Write("Prev "); break; case "Marked": Console.Write("Marked "); break; case "Unmarked": Console.Write("Unmarked "); break; default: Console.Write("Unknown array name.\n\n"); break; }
Console.Write("Array\n--------------\n\n");
switch(arrayName) { case "Prev":
for(int i = 0; i < nodes; ++i) { Console.Write("Node {0}\t\t{1}\n", i + 1, prevArray[i] + 1); }
break; case "Marked":
for(int i = 0; i < nodes; ++i) { Console.Write("Node {0}\t\t{1}\n", i + 1, markedArray[i]); }
break; case "Unmarked":
for(int i = 0; i < nodes; ++i) { Console.Write("Node {0}\t\t{1}\n", i + 1, unmarkedArray[i]); }
break; default: break; }
Console.Write("\n\n"); } } }
Hi,
Did you tried it? did you run a test and was ok?
IMO no a lot of people have time to debug it or check for correctness. Dont
get me wrong but we do have jobs to keep :)
Is this a homework? ;)
cheers,
--
Ignacio Machin,
ignacio.machin AT dot.state.fl.us
Florida Department Of Transportation
<A_*********@hotmail.com> wrote in message
news:11*********************@o13g2000cwo.googlegro ups.com... thoughts or criticism anyone?
using System;
namespace Dijkstra { public class Algorithm { private const int nodes = 10; private const int labels = 10; /* this implementation of Dijkstra's Algorithm assumes a 10 x 10 reference matrix of labels (edge values) is provided */
private const int startNode = 1; private const int endNode = 10; /* a second assumption is point one is our starting or "vantage" point and point ten is our end point */
private const int infinity = 10000; // value 10,000 represents no edge / link between nodes
private static int [,] refMatrix = new int[nodes, labels]; private static int [] distArray = new int [labels]; private static int [] prevArray = new int [nodes]; private static bool [] markedArray = new bool [nodes]; private static bool [] unmarkedArray = new bool [nodes];
private Algorithm() { }
public static void ImportRefMatrix() { string l_Filename = "..\\..\\Matrix.DAT"; refMatrix = Import.ContructMatrix(l_Filename); }
public static void InitializeArrays() { int i = 0;
for(i = 0; i < labels; ++i) { distArray[i] = infinity; // no path exists
}
for(i = 0; i < nodes; ++i) { prevArray[i] = 0; // no nodes have predecessors
}
for(i = 0; i < nodes; ++i) { markedArray[i] = false; unmarkedArray[i] = true; }
markedArray[startNode - 1] = true; unmarkedArray[startNode - 1] = false; // starting point considered marked
// - 1 often used when dealing with array indexes (which begin at 0)
}
public static void Implement() {
while(CountMarkedVertices() < nodes) { int closestVertex = SelectUnmarkedVertexClosestToSource(startNode); markedArray[closestVertex - 1] = true; unmarkedArray[closestVertex - 1] = false;
for(int i = 0; i < labels; ++i) { if(refMatrix[closestVertex - 1, i] < infinity) // for each edge adjacent to closestVertex
{ if(refMatrix[startNode - 1, i] > refMatrix[startNode - 1, closestVertex - 1] + refMatrix[closestVertex - 1, i]) /* if distance from starting point to adjacent node exceeds distance from starting point to closestVertex plus distance from closestVertex to adjacent node */
{ refMatrix[startNode - 1, i] = refMatrix[startNode - 1, closestVertex - 1] + refMatrix[closestVertex - 1, i]; // update distance grid
prevArray[i] = closestVertex - 1; } } }
}
}
public static int CountMarkedVertices() { int counter = 0;
for(int i = 0; i < nodes; ++i) { if(markedArray[i] == true) ++counter; }
return counter; }
public static int SelectUnmarkedVertexClosestToSource(int sourceNode) { int shortestDistanceToSource = infinity; int closestVertex = 0;
for(int i = 0; i < nodes; ++i) { if(unmarkedArray[i] == true) { if(refMatrix[sourceNode - 1, i] < shortestDistanceToSource) { shortestDistanceToSource = refMatrix[sourceNode - 1, i]; closestVertex = i; } } }
return ++closestVertex; }
public static void ShowResults() { Console.Write("\nThe following chart shows all nodes on the left.\n\nTheir precedessors " + "are listed in the right column.\n\n'Prev' refers to 'previous' or 'preceding' node." + "\n\n\n\n"); ShowArray("Prev"); }
public static void ShowArray(string arrayName) {
switch(arrayName) { case "Prev": Console.Write("Prev "); break; case "Marked": Console.Write("Marked "); break; case "Unmarked": Console.Write("Unmarked "); break; default: Console.Write("Unknown array name.\n\n"); break; }
Console.Write("Array\n--------------\n\n");
switch(arrayName) { case "Prev":
for(int i = 0; i < nodes; ++i) { Console.Write("Node {0}\t\t{1}\n", i + 1, prevArray[i] + 1); }
break; case "Marked":
for(int i = 0; i < nodes; ++i) { Console.Write("Node {0}\t\t{1}\n", i + 1, markedArray[i]); }
break; case "Unmarked":
for(int i = 0; i < nodes; ++i) { Console.Write("Node {0}\t\t{1}\n", i + 1, unmarkedArray[i]); }
break; default: break; }
Console.Write("\n\n"); } } }
Peter N Roth wrote: what is ur question, exactly?
just whether anyone has comments from a performance or professionalism
point of view.
Ignacio Machin ( .NET/ C# MVP ) wrote: Hi,
Did you tried it? did you run a test and was ok?
IMO no a lot of people have time to debug it or check for correctness. Dont get me wrong but we do have jobs to keep :)
Is this a homework? ;)
cheers,
yes to all of the above.
On 7 Nov 2005 09:31:26 -0800, A_*********@hotmail.com wrote: thoughts or criticism anyone?
1 You are not using documentation comments (///). At the very least,
everything that is declared public should have a documentation comment
so that the IDE can help users of your class. This helps reusability.
2 I see very little error handling code. How robust is your class?
3 You have hard coded values like the import filename and node count.
You may want to amend your class so that the users can override the
defaults if they want to.
4 Why use a low number like 10,000 as infinity? I think it would be
better to use the system defined maximum integer so there is less
chance of a real distance being greater than infinity.
5 You do a lot of scanning through arrays. Perhaps a foreach loop
might be clearer.
rossum
[snip code]
The ultimate truth is that there is no ultimate truth This thread has been closed and replies have been disabled. Please start a new discussion. Similar topics |
by: Der Andere |
last post by:
Do you know of an efficient implementation (priority queues) of Dijkstra's
algorithm for calculating the shortest distances between vertices in a
graph?
Cheers,
Matthias
--
Für emails...
|
by: Ricardo Batista |
last post by:
I need that someone help me.
I need to program the dijkstra algorithm by object oriented.
I'll send my code.
#!/usr/bin/env python
# -*- encoding: latin -*-
NIL =
|
by: A_StClaire_ |
last post by:
implemented Dijkstra's algorithm as follows. plz pour on the negative
criticism cuz I know I have a ton to learn.
oh, before you flame me regarding the language, my class was told to do
this in...
|
by: arlef |
last post by:
Can somebody please explain and provide pseudocode for the Dijkstra
algorithm?
I'm trying to implement the Dijkstra shortest path algorithm. However, I'm
finding it extremely difficult to...
|
by: Josh Zenker |
last post by:
I've been working on an implementation of Dijkstra's algorithm on and
off for the past few days. I thought I was close to being finished,
but clearly I've done something wrong. I'm not a very...
| |
by: abhradwip |
last post by:
I want to write a program which will find the shortest path between n no. of cities using dijkstra's algorithm ...... but could not do it..... i have written a program which will give the shortest...
|
by: Ganon11 |
last post by:
Hey guys,
I'm back, and with another FUN question!
My latest homework asks this question:
"Suppose all the edge weights in a graph are integers between 1 and |E|. How fast can Dijkstra's...
|
by: shashankbs |
last post by:
Given a topology and a certain node X, find the shortest path tree
with X as the root.
* Input: a topology file similar to the following (which is a three-node
ring)
...
|
by: Glenton |
last post by:
Hi All
Here is a very simple little class for finding a shortest route on a network, following Dijkstra's Algorithm:
#!/usr/bin/env python
#This is meant to solve a maze with Dijkstra's...
|
by: marktang |
last post by:
ONU (Optical Network Unit) is one of the key components for providing high-speed Internet services. Its primary function is to act as an endpoint device located at the user's premises. However,...
|
by: Oralloy |
last post by:
Hello folks,
I am unable to find appropriate documentation on the type promotion of bit-fields when using the generalised comparison operator "<=>".
The problem is that using the GNU compilers,...
| |
by: Hystou |
last post by:
Overview:
Windows 11 and 10 have less user interface control over operating system update behaviour than previous versions of Windows. In Windows 11 and 10, there is no way to turn off the Windows...
|
by: agi2029 |
last post by:
Let's talk about the concept of autonomous AI software engineers and no-code agents. These AIs are designed to manage the entire lifecycle of a software development project—planning, coding, testing,...
|
by: conductexam |
last post by:
I have .net C# application in which I am extracting data from word file and save it in database particularly. To store word all data as it is I am converting the whole word file firstly in HTML and...
|
by: adsilva |
last post by:
A Windows Forms form does not have the event Unload, like VB6. What one acts like?
|
by: 6302768590 |
last post by:
Hai team
i want code for transfer the data from one system to another through IP address by using C# our system has to for every 5mins then we have to update the data what the data is updated ...
|
by: muto222 |
last post by:
How can i add a mobile payment intergratation into php mysql website.
| |
by: bsmnconsultancy |
last post by:
In today's digital era, a well-designed website is crucial for businesses looking to succeed. Whether you're a small business owner or a large corporation in Toronto, having a strong online presence...
| |