#include<stdio.h>
#include<stdlib.h>
#define MAX_NODES 1024
#define INFINITY 1000
// Hardcoded graph and its size
int n = 8;
int cost = 0;
int dist[8][8] = {{0, 2, 0, 0, 0, 0, 6, 0},
{2, 0, 7, 0, 2, 0, 0, 0},
{0, 7, 0, 3, 0, 3, 0, 0},
{0, 0, 3, 0, 0, 0, 0, 2},
{0, 2, 0, 0, 0, 2, 1, 0},
{0, 0, 3, 0, 2, 0, 0, 2},
{6, 0, 0, 0, 1, 0, 0, 4},
{0, 0, 0, 2, 0, 2, 4, 0}};
// Structure to hold state of each node during Dijkstra's algorithm
struct state {
int pre;
int length;
int label;
};
// Function to find the shortest distance from source to destination
// using Dijkstra's algorithm.
// s: source vertex, t: destination vertex, path[]: array to store the path
int shortest_dist(int s, int t, int path[]) {
int i, k, min;
struct state state[MAX_NODES];
// 1. Initialization
for (i = 0; i < n; i++) {
state[i].pre = -1;
state[i].length = INFINITY;
state[i].label = 0;
}
state[s].length = 0;
// 2. Main loop of Dijkstra's algorithm
do {
// Find the unvisited node with the minimum length
k = -1;
min = INFINITY;
for (i = 0; i < n; i++) {
if (state[i].label == 0 && state[i].length < min) {
min = state[i].length;
k = i;
}
}
// Break if no reachable unvisited nodes are found
if (k == -1) {
cost = INFINITY; // No path exists
return 0;
}
// Mark the found node as visited/finalized
state[k].label = 1;
// Update the lengths of its neighbors
for (i = 0; i < n; i++) {
if (dist[k][i] != 0 && state[i].label == 0) {
if (state[k].length + dist[k][i] < state[i].length) {
state[i].pre = k;
state[i].length = state[k].length + dist[k][i];
}
}
}
} while (state[t].label == 0); // Continue until the destination is finalized
// 3. Path reconstruction and cost calculation
int path_length = 0;
int current = t;
// The cost is the final length of the path to the destination node
cost = state[t].length;
// Reconstruct the path from destination to source using the 'pre' array
while (current != -1) {
path[path_length++] = current;
current = state[current].pre;
}
return path_length;
}
int main() {
int i, path_len, p, q;
int path[MAX_NODES];
printf("\nNote: This program uses a hardcoded 8-node graph.\n");
printf("\nEnter Source Vertex (1-8): "); printf("\nEnter Destination Vertex (1-8): ");
// Call the function with corrected arguments (source, destination)
path_len = shortest_dist(p - 1, q - 1, path);
// Check if a path was found
if (cost == INFINITY) {
printf("\nNo path exists from vertex %d to vertex %d.\n", p
, q
); } else {
// Print the path in the correct order (from source to destination)
for (i = path_len - 1; i >= 0; i--) {
if (i > 0) {
}
}
printf("\nCost is: %d \n", cost
); }
return 0;
}
I2luY2x1ZGU8c3RkaW8uaD4KI2luY2x1ZGU8c3RkbGliLmg+CiNkZWZpbmUgTUFYX05PREVTIDEwMjQKI2RlZmluZSBJTkZJTklUWSAxMDAwCgovLyBIYXJkY29kZWQgZ3JhcGggYW5kIGl0cyBzaXplCmludCBuID0gODsKaW50IGNvc3QgPSAwOwppbnQgZGlzdFs4XVs4XSA9IHt7MCwgMiwgMCwgMCwgMCwgMCwgNiwgMH0sCiAgICAgICAgICAgICAgICAgIHsyLCAwLCA3LCAwLCAyLCAwLCAwLCAwfSwKICAgICAgICAgICAgICAgICAgezAsIDcsIDAsIDMsIDAsIDMsIDAsIDB9LAogICAgICAgICAgICAgICAgICB7MCwgMCwgMywgMCwgMCwgMCwgMCwgMn0sCiAgICAgICAgICAgICAgICAgIHswLCAyLCAwLCAwLCAwLCAyLCAxLCAwfSwKICAgICAgICAgICAgICAgICAgezAsIDAsIDMsIDAsIDIsIDAsIDAsIDJ9LAogICAgICAgICAgICAgICAgICB7NiwgMCwgMCwgMCwgMSwgMCwgMCwgNH0sCiAgICAgICAgICAgICAgICAgIHswLCAwLCAwLCAyLCAwLCAyLCA0LCAwfX07CgovLyBTdHJ1Y3R1cmUgdG8gaG9sZCBzdGF0ZSBvZiBlYWNoIG5vZGUgZHVyaW5nIERpamtzdHJhJ3MgYWxnb3JpdGhtCnN0cnVjdCBzdGF0ZSB7CiAgICBpbnQgcHJlOwogICAgaW50IGxlbmd0aDsKICAgIGludCBsYWJlbDsKfTsKCi8vIEZ1bmN0aW9uIHRvIGZpbmQgdGhlIHNob3J0ZXN0IGRpc3RhbmNlIGZyb20gc291cmNlIHRvIGRlc3RpbmF0aW9uCi8vIHVzaW5nIERpamtzdHJhJ3MgYWxnb3JpdGhtLgovLyBzOiBzb3VyY2UgdmVydGV4LCB0OiBkZXN0aW5hdGlvbiB2ZXJ0ZXgsIHBhdGhbXTogYXJyYXkgdG8gc3RvcmUgdGhlIHBhdGgKaW50IHNob3J0ZXN0X2Rpc3QoaW50IHMsIGludCB0LCBpbnQgcGF0aFtdKSB7CiAgICBpbnQgaSwgaywgbWluOwogICAgc3RydWN0IHN0YXRlIHN0YXRlW01BWF9OT0RFU107CgogICAgLy8gMS4gSW5pdGlhbGl6YXRpb24KICAgIGZvciAoaSA9IDA7IGkgPCBuOyBpKyspIHsKICAgICAgICBzdGF0ZVtpXS5wcmUgPSAtMTsKICAgICAgICBzdGF0ZVtpXS5sZW5ndGggPSBJTkZJTklUWTsKICAgICAgICBzdGF0ZVtpXS5sYWJlbCA9IDA7CiAgICB9CiAgICBzdGF0ZVtzXS5sZW5ndGggPSAwOwoKICAgIC8vIDIuIE1haW4gbG9vcCBvZiBEaWprc3RyYSdzIGFsZ29yaXRobQogICAgZG8gewogICAgICAgIC8vIEZpbmQgdGhlIHVudmlzaXRlZCBub2RlIHdpdGggdGhlIG1pbmltdW0gbGVuZ3RoCiAgICAgICAgayA9IC0xOwogICAgICAgIG1pbiA9IElORklOSVRZOwogICAgICAgIGZvciAoaSA9IDA7IGkgPCBuOyBpKyspIHsKICAgICAgICAgICAgaWYgKHN0YXRlW2ldLmxhYmVsID09IDAgJiYgc3RhdGVbaV0ubGVuZ3RoIDwgbWluKSB7CiAgICAgICAgICAgICAgICBtaW4gPSBzdGF0ZVtpXS5sZW5ndGg7CiAgICAgICAgICAgICAgICBrID0gaTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgLy8gQnJlYWsgaWYgbm8gcmVhY2hhYmxlIHVudmlzaXRlZCBub2RlcyBhcmUgZm91bmQKICAgICAgICBpZiAoayA9PSAtMSkgewogICAgICAgICAgICBjb3N0ID0gSU5GSU5JVFk7IC8vIE5vIHBhdGggZXhpc3RzCiAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgIH0KCiAgICAgICAgLy8gTWFyayB0aGUgZm91bmQgbm9kZSBhcyB2aXNpdGVkL2ZpbmFsaXplZAogICAgICAgIHN0YXRlW2tdLmxhYmVsID0gMTsKCiAgICAgICAgLy8gVXBkYXRlIHRoZSBsZW5ndGhzIG9mIGl0cyBuZWlnaGJvcnMKICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKSB7CiAgICAgICAgICAgIGlmIChkaXN0W2tdW2ldICE9IDAgJiYgc3RhdGVbaV0ubGFiZWwgPT0gMCkgewogICAgICAgICAgICAgICAgaWYgKHN0YXRlW2tdLmxlbmd0aCArIGRpc3Rba11baV0gPCBzdGF0ZVtpXS5sZW5ndGgpIHsKICAgICAgICAgICAgICAgICAgICBzdGF0ZVtpXS5wcmUgPSBrOwogICAgICAgICAgICAgICAgICAgIHN0YXRlW2ldLmxlbmd0aCA9IHN0YXRlW2tdLmxlbmd0aCArIGRpc3Rba11baV07CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9IHdoaWxlIChzdGF0ZVt0XS5sYWJlbCA9PSAwKTsgLy8gQ29udGludWUgdW50aWwgdGhlIGRlc3RpbmF0aW9uIGlzIGZpbmFsaXplZAoKICAgIC8vIDMuIFBhdGggcmVjb25zdHJ1Y3Rpb24gYW5kIGNvc3QgY2FsY3VsYXRpb24KICAgIGludCBwYXRoX2xlbmd0aCA9IDA7CiAgICBpbnQgY3VycmVudCA9IHQ7CgogICAgLy8gVGhlIGNvc3QgaXMgdGhlIGZpbmFsIGxlbmd0aCBvZiB0aGUgcGF0aCB0byB0aGUgZGVzdGluYXRpb24gbm9kZQogICAgY29zdCA9IHN0YXRlW3RdLmxlbmd0aDsKCiAgICAvLyBSZWNvbnN0cnVjdCB0aGUgcGF0aCBmcm9tIGRlc3RpbmF0aW9uIHRvIHNvdXJjZSB1c2luZyB0aGUgJ3ByZScgYXJyYXkKICAgIHdoaWxlIChjdXJyZW50ICE9IC0xKSB7CiAgICAgICAgcGF0aFtwYXRoX2xlbmd0aCsrXSA9IGN1cnJlbnQ7CiAgICAgICAgY3VycmVudCA9IHN0YXRlW2N1cnJlbnRdLnByZTsKICAgIH0KCiAgICByZXR1cm4gcGF0aF9sZW5ndGg7Cn0KCmludCBtYWluKCkgewogICAgaW50IGksIHBhdGhfbGVuLCBwLCBxOwogICAgaW50IHBhdGhbTUFYX05PREVTXTsKCiAgICBwcmludGYoIlxuTm90ZTogVGhpcyBwcm9ncmFtIHVzZXMgYSBoYXJkY29kZWQgOC1ub2RlIGdyYXBoLlxuIik7CgogICAgcHJpbnRmKCJcbkVudGVyIFNvdXJjZSBWZXJ0ZXggKDEtOCk6ICIpOwogICAgc2NhbmYoIiVkIiwgJnApOwogICAgcHJpbnRmKCJcbkVudGVyIERlc3RpbmF0aW9uIFZlcnRleCAoMS04KTogIik7CiAgICBzY2FuZigiJWQiLCAmcSk7CgogICAgLy8gQ2FsbCB0aGUgZnVuY3Rpb24gd2l0aCBjb3JyZWN0ZWQgYXJndW1lbnRzIChzb3VyY2UsIGRlc3RpbmF0aW9uKQogICAgcGF0aF9sZW4gPSBzaG9ydGVzdF9kaXN0KHAgLSAxLCBxIC0gMSwgcGF0aCk7CgogICAgLy8gQ2hlY2sgaWYgYSBwYXRoIHdhcyBmb3VuZAogICAgaWYgKGNvc3QgPT0gSU5GSU5JVFkpIHsKICAgICAgICBwcmludGYoIlxuTm8gcGF0aCBleGlzdHMgZnJvbSB2ZXJ0ZXggJWQgdG8gdmVydGV4ICVkLlxuIiwgcCwgcSk7CiAgICB9IGVsc2UgewogICAgICAgIC8vIFByaW50IHRoZSBwYXRoIGluIHRoZSBjb3JyZWN0IG9yZGVyIChmcm9tIHNvdXJjZSB0byBkZXN0aW5hdGlvbikKICAgICAgICBwcmludGYoIlxuU2hvcnRlc3QgcGF0aDogIik7CiAgICAgICAgZm9yIChpID0gcGF0aF9sZW4gLSAxOyBpID49IDA7IGktLSkgewogICAgICAgICAgICBwcmludGYoIiVjIiwgcGF0aFtpXSArICdBJyk7CiAgICAgICAgICAgIGlmIChpID4gMCkgewogICAgICAgICAgICAgICAgcHJpbnRmKCIgLT4gIik7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgcHJpbnRmKCJcbkNvc3QgaXM6ICVkIFxuIiwgY29zdCk7CiAgICB9CgogICAgcmV0dXJuIDA7Cn0=