#include <iostream>
#include <climits>
using namespace std;
// constant test data
const int numberNodes = 4;
unsigned int adjacencyMatrix[numberNodes][numberNodes] = {
{ 0, 5, 10, UINT_MAX },
{ UINT_MAX, 0, UINT_MAX, 3 },
{ UINT_MAX, 7, 0, UINT_MAX },
{ UINT_MAX, UINT_MAX, 4, 0 }
};
// result data
unsigned int distanceArray[numberNodes];
bool visitedSet[numberNodes];
void dijkstra300()
{
int startNode = 1; // getStartNode300();
for (int i = 0; i < numberNodes; i++)
distanceArray[i] = UINT_MAX;
distanceArray[startNode] = 0;
for (int count = 0; count < numberNodes - 1; count++) {
unsigned int min = UINT_MAX, min_index; //<== unsigned and UINT_MAX
for (int v = 0; v < numberNodes; v++)
if (visitedSet[v] == false && distanceArray[v] <= min) // OR (not AND)
min = distanceArray[v], min_index = v;
int u = min_index;
visitedSet[u] = true;
for (int v = 0; v < numberNodes; v++)
if (!visitedSet[v] && adjacencyMatrix[u][v] && adjacencyMatrix[u][v] != UINT_MAX
&& distanceArray[u] + adjacencyMatrix[u][v] < distanceArray[v])
distanceArray[v] = distanceArray[u] + adjacencyMatrix[u][v];
}
for (int i = 0; i < numberNodes; i++)
cout << visitedSet[i] << "\t" << distanceArray[i] << endl;
}
int main()
{
dijkstra300();
cin.get();
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8Y2xpbWl0cz4KdXNpbmcgbmFtZXNwYWNlIHN0ZDsgCgovLyBjb25zdGFudCB0ZXN0IGRhdGEgCmNvbnN0IGludCBudW1iZXJOb2RlcyA9IDQ7IAp1bnNpZ25lZCBpbnQgYWRqYWNlbmN5TWF0cml4W251bWJlck5vZGVzXVtudW1iZXJOb2Rlc10gPSB7Cgl7IDAsIDUsIDEwLCBVSU5UX01BWCB9LAoJeyBVSU5UX01BWCwgMCwgVUlOVF9NQVgsIDMgfSwKCXsgVUlOVF9NQVgsIDcsIDAsIFVJTlRfTUFYIH0sCgl7IFVJTlRfTUFYLCBVSU5UX01BWCwgNCwgMCB9Cn07Ci8vIHJlc3VsdCBkYXRhIAp1bnNpZ25lZCBpbnQgZGlzdGFuY2VBcnJheVtudW1iZXJOb2Rlc107CmJvb2wgdmlzaXRlZFNldFtudW1iZXJOb2Rlc107Cgp2b2lkIGRpamtzdHJhMzAwKCkKewoJaW50IHN0YXJ0Tm9kZSA9IDE7ICAvLyBnZXRTdGFydE5vZGUzMDAoKTsKCQoJZm9yIChpbnQgaSA9IDA7IGkgPCBudW1iZXJOb2RlczsgaSsrKQoJCWRpc3RhbmNlQXJyYXlbaV0gPSBVSU5UX01BWDsKCQoJZGlzdGFuY2VBcnJheVtzdGFydE5vZGVdID0gMDsKCglmb3IgKGludCBjb3VudCA9IDA7IGNvdW50IDwgbnVtYmVyTm9kZXMgLSAxOyBjb3VudCsrKSB7CgkJdW5zaWduZWQgaW50IG1pbiA9IFVJTlRfTUFYLCBtaW5faW5kZXg7ICAgIC8vPD09IHVuc2lnbmVkIGFuZCBVSU5UX01BWAoKCQlmb3IgKGludCB2ID0gMDsgdiA8IG51bWJlck5vZGVzOyB2KyspCgkJCWlmICh2aXNpdGVkU2V0W3ZdID09IGZhbHNlICYmIGRpc3RhbmNlQXJyYXlbdl0gPD0gbWluKSAvLyBPUiAobm90IEFORCkgCgkJCQltaW4gPSBkaXN0YW5jZUFycmF5W3ZdLCBtaW5faW5kZXggPSB2OwoKCQlpbnQgdSA9IG1pbl9pbmRleDsKCgkJdmlzaXRlZFNldFt1XSA9IHRydWU7CgoJCWZvciAoaW50IHYgPSAwOyB2IDwgbnVtYmVyTm9kZXM7IHYrKykKCQkJaWYgKCF2aXNpdGVkU2V0W3ZdICYmIGFkamFjZW5jeU1hdHJpeFt1XVt2XSAmJiBhZGphY2VuY3lNYXRyaXhbdV1bdl0gIT0gVUlOVF9NQVggCgkJCQkmJiBkaXN0YW5jZUFycmF5W3VdICsgYWRqYWNlbmN5TWF0cml4W3VdW3ZdIDwgZGlzdGFuY2VBcnJheVt2XSkKCQkJCWRpc3RhbmNlQXJyYXlbdl0gPSBkaXN0YW5jZUFycmF5W3VdICsgYWRqYWNlbmN5TWF0cml4W3VdW3ZdOwoJfQoKCWZvciAoaW50IGkgPSAwOyBpIDwgbnVtYmVyTm9kZXM7IGkrKykKCQljb3V0IDw8IHZpc2l0ZWRTZXRbaV0gPDwgIlx0IiA8PCBkaXN0YW5jZUFycmF5W2ldIDw8IGVuZGw7IAp9CgppbnQgbWFpbigpCnsKCglkaWprc3RyYTMwMCgpOwoKCWNpbi5nZXQoKTsKfQ==