fork(1) download
  1. #include <iostream>
  2. #include <climits>
  3. using namespace std;
  4.  
  5. // constant test data
  6. const int numberNodes = 4;
  7. unsigned int adjacencyMatrix[numberNodes][numberNodes] = {
  8. { 0, 5, 10, UINT_MAX },
  9. { UINT_MAX, 0, UINT_MAX, 3 },
  10. { UINT_MAX, 7, 0, UINT_MAX },
  11. { UINT_MAX, UINT_MAX, 4, 0 }
  12. };
  13. // result data
  14. unsigned int distanceArray[numberNodes];
  15. bool visitedSet[numberNodes];
  16.  
  17. void dijkstra300()
  18. {
  19. int startNode = 1; // getStartNode300();
  20.  
  21. for (int i = 0; i < numberNodes; i++)
  22. distanceArray[i] = UINT_MAX;
  23.  
  24. distanceArray[startNode] = 0;
  25.  
  26. for (int count = 0; count < numberNodes - 1; count++) {
  27. unsigned int min = UINT_MAX, min_index; //<== unsigned and UINT_MAX
  28.  
  29. for (int v = 0; v < numberNodes; v++)
  30. if (visitedSet[v] == false && distanceArray[v] <= min) // OR (not AND)
  31. min = distanceArray[v], min_index = v;
  32.  
  33. int u = min_index;
  34.  
  35. visitedSet[u] = true;
  36.  
  37. for (int v = 0; v < numberNodes; v++)
  38. if (!visitedSet[v] && adjacencyMatrix[u][v] && adjacencyMatrix[u][v] != UINT_MAX
  39. && distanceArray[u] + adjacencyMatrix[u][v] < distanceArray[v])
  40. distanceArray[v] = distanceArray[u] + adjacencyMatrix[u][v];
  41. }
  42.  
  43. for (int i = 0; i < numberNodes; i++)
  44. cout << visitedSet[i] << "\t" << distanceArray[i] << endl;
  45. }
  46.  
  47. int main()
  48. {
  49.  
  50. dijkstra300();
  51.  
  52. cin.get();
  53. }
Success #stdin #stdout 0s 3464KB
stdin
Standard input is empty
stdout
0	4294967295
1	0
1	7
1	3