কম্পিউটার

ডিজকস্ট্রার সংক্ষিপ্ততম পাথ অ্যালগরিদমের জন্য C/C++ প্রোগ্রাম


আমাদের গ্রাফে একটি উৎস শীর্ষবিন্দু সহ একটি গ্রাফ দেওয়া হয়েছে। এবং আমাদের সোর্স শীর্ষবিন্দু থেকে গ্রাফের অন্যান্য সমস্ত শীর্ষবিন্দুতে সংক্ষিপ্ততম পথটি খুঁজে বের করতে হবে৷

ডিজিকস্ট্রার অ্যালগরিদম গ্রাফের উৎস শীর্ষবিন্দু থেকে গ্রাফের মূল নোড পর্যন্ত সংক্ষিপ্ততম পথ খুঁজে বের করার জন্য একটি লোভী অ্যালগরিদম।

অ্যালগরিদম

Step 1 : Create a set shortPath to store vertices that come in the way of the shortest path tree.
Step 2 : Initialize all distance values as INFINITE and assign distance values as 0 for source vertex so that it is picked first.
Step 3 : Loop until all vertices of the graph are in the shortPath.
   Step 3.1 : Take a new vertex that is not visited and is nearest.
   Step 3.2 : Add this vertex to shortPath.
   Step 3.3 : For all adjacent vertices of this vertex update distances. Now check every adjacent vertex of V, if sum of distance of u and weight of edge is elss the update it.

এই অ্যালগরিদমের উপর ভিত্তি করে একটি প্রোগ্রাম তৈরি করতে দেয়।

উদাহরণ

#include <limits.h>
#include <stdio.h>
#define V 9
int minDistance(int dist[], bool sptSet[]) {
   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;
}
int printSolution(int dist[], int n) {
   printf("Vertex Distance from Source\n");
   for (int i = 0; i < V; i++)
      printf("%d \t %d\n", i, dist[i]);
}
void dijkstra(int graph[V][V], int src) {
   int dist[V];
   bool sptSet[V];
   for (int i = 0; i < V; i++)
      dist[i] = INT_MAX, sptSet[i] = false;
      dist[src] = 0;
   for (int count = 0; count < V - 1; count++) {
      int u = minDistance(dist, sptSet);
      sptSet[u] = true;
      for (int v = 0; v < V; 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];
   }
   printSolution(dist, V);
}
int main() {
   int graph[V][V] = { { 0, 6, 0, 0, 0, 0, 0, 8, 0 },
      { 6, 0, 8, 0, 0, 0, 0, 13, 0 },
      { 0, 8, 0, 7, 0, 6, 0, 0, 2 },
      { 0, 0, 7, 0, 9, 14, 0, 0, 0 },
      { 0, 0, 0, 9, 0, 10, 0, 0, 0 },
      { 0, 0, 6, 14, 10, 0, 2, 0, 0 },
      { 0, 0, 0, 0, 0, 2, 0, 1, 6 },
      { 8, 13, 0, 0, 0, 0, 1, 0, 7 },
      { 0, 0, 2, 0, 0, 0, 6, 7, 0 }
   };
   dijkstra(graph, 0);
   return 0;
}

আউটপুট

Vertex Distance from Source
0 0
1 6
2 14
3 21
4 21
5 11
6 9
7 8
8 15

  1. সংলগ্নতা তালিকার প্রতিনিধিত্বের জন্য ডিজকস্ট্রার অ্যালগরিদম

  2. সর্বোত্তম পৃষ্ঠা প্রতিস্থাপন অ্যালগরিদমের জন্য C++ প্রোগ্রাম

  3. অ্যারের উপাদানগুলির গুণনের জন্য C++ প্রোগ্রাম

  4. C++ এ অক্টাল থেকে দশমিক রূপান্তরের জন্য প্রোগ্রাম