متن کامل آگهی:
یه برنامه به زبان C++ داشتم
خروجی و برنامه یه گراف ساده با الگوریتم داکسترا میخواستم
// A C++ program for Dijkstra's single source shortest path algorithm. // The program is for adjacency matrix representation of the graph #include <stdio.h> #include <limits.h> // Number of vertices in the graph #define V 9 // A utility function to find the vertex with minimum distance value, from // the set of vertices not yet included in shortest path tree int minDistance(int dist\[\], bool sptSet\[\]) { // Initialize min value int min = INT\_MAX, min\_index; for (int v = 0; v < V; v++) if (sptSet\[v\] == false && dist\[v\] <= min) min = dist\[v\], min\_index = v; return min\_index; } // A utility function to print the constructed distance array int printSolution(int dist\[\], int n) { printf("Vertex Distance from Source\n"); for (int i = 0; i < V; i++) printf("%d tt %d\n", i, dist\[i\]); } // Function that implements Dijkstra's single source shortest path algorithm // for a graph represented using adjacency matrix representation void dijkstra(int graph\[V\]\[V\], int src) { int dist\[V\]; // The output array. dist\[i\] will hold the shortest // distance from src to i bool sptSet\[V\]; // sptSet\[i\] will be true if vertex i is included in shortest // path tree or shortest distance from src to i is finalized // Initialize all distances as INFINITE and stpSet\[\] as false for (int i = 0; i < V; i++) dist\[i\] = INT\_MAX, sptSet\[i\] = false; // Distance of source vertex from itself is always 0 dist\[src\] = 0; // Find shortest path for all vertices for (int count = 0; count < V-1; count++) { // Pick the minimum distance vertex from the set of vertices not // yet processed. u is always equal to src in the first iteration. int u = minDistance(dist, sptSet); // Mark the picked vertex as processed sptSet\[u\] = true; // Update dist value of the adjacent vertices of the picked vertex. for (int v = 0; v < V; v++) // Update dist\[v\] only if is not in sptSet, there is an edge from // u to v, and total weight of path from src to v through u is // smaller than current value of dist\[v\] if (!sptSet\[v\] && graph\[u\]\[v\] && dist\[u\] != INT\_MAX && dist\[u\]+graph\[u\]\[v\] < dist\[v\]) dist\[v\] = dist\[u\] + graph\[u\]\[v\]; } // print the constructed distance array printSolution(dist, V); } // driver program to test above function int main() { /\* Let us create the example graph discussed above \*/ int graph\[V\]\[V\] = {{0, 4, 0, 0, 0, 0, 0, 8, 0}, {4, 0, 8, 0, 0, 0, 0, 11, 0}, {0, 8, 0, 7, 0, 4, 0, 0, 2}, {0, 0, 7, 0, 9, 14, 0, 0, 0}, {0, 0, 0, 9, 0, 10, 0, 0, 0}, {0, 0, 4, 14, 10, 0, 2, 0, 0}, {0, 0, 0, 0, 0, 2, 0, 1, 6}, {8, 11, 0, 0, 0, 0, 1, 0, 7}, {0, 0, 2, 0, 0, 0, 6, 7, 0} }; dijkstra(graph, 0); return 0; }
یه نمونه کد حل شده بود
"برای درک بهتر موضوع، مثال زیر مورد بررسی قرار خواهد گرفت.مجموعه sptSet در ابتدا خالی است و فاصله تخصیص پیدا کرده به راسها برابر با { INF, INF, INF, INF, INF, INF, INF ,صفر} هستند که در آن INF نشانگر بینهایت (Infinite) است. اکنون، باید راسی که دارای کمترین مقدار فاصله است انتخاب شود. راس 0 انتخاب میشود و در sptSet قرار میگیرد"
https://blog.faradars.org/dijkstras-algorithm/#:~:text=%D8%A8%D8%B1%D8%A7%DB%8C%20%D8%AF%D8%B1%DA%A9%20%D8%A8%D9%87%D8%AA%D8%B1,sptSet%20%D9%82%D8%B1%D8%A7%D8%B1%20%D9%85%DB%8C%E2%80%8C%DA%AF%DB%8C%D8%B1%D8%AF
کد نوشته شده در بالا برای این مثال است .
میخواستم کد برای این شکل تغییر کنه و خروجی بده با اسامی همین گره ها و وزن های روی یال ها که اعشاری هستند (ضمیمه کردم)
کد دایجسترا برای شکل ساده ای که ارسال کردم از گره HU آغاز و گره انتهایی A6