এখানে আমরা দুটি শীর্ষবিন্দুর মধ্যে সংক্ষিপ্ততম পথ খুঁজতে জনসনের অ্যালগরিদম দেখব।
গ্রাফ এখানে দেওয়া আছে. প্রান্তগুলির মধ্যে সংক্ষিপ্ততম পথটি নীচের মত। এই প্রোগ্রামটি তাদের খরচের সাথে শীর্ষবিন্দুর সংখ্যা, প্রান্তের সংখ্যা এবং প্রান্তগুলি নেবে৷
ইনপুট − শীর্ষবিন্দু:3
প্রান্ত:5
খরচ সহ প্রান্ত -
1 2 8
2 1 12
1 3 22
3 1 6
২ ৩ ৪
আউটপুট − গ্রাফের দূরত্ব ম্যাট্রিক্স।
0 | 8 | 12 |
10 | 0 | 4 |
6 | 14 | 0 |
অ্যালগরিদম
জনসন অ্যালগরিদম(খরচ)
ইনপুট - প্রদত্ত গ্রাফের খরচ ম্যাট্রিক্স।
আউটপুট − যে কোনো শীর্ষ থেকে যেকোনো শীর্ষবিন্দুর মধ্যে সংক্ষিপ্ততম পথের জন্য ম্যাট্রিক্স।
Begin Create another matrix ‘A’ same as cost matrix, if there is no edge between ith row and jth column, put infinity at A[i,j]. for k := 1 to n, do for i := 1 to n, do for j := 1 to n, do A[i, j] = minimum of A[i, j] and (A[i, k] + A[k, j]) done done done display the current A matrix Endপ্রদর্শন করে
উদাহরণ
#include<iostream> #define INF 9999 using namespace std; int min(int a, int b); int cost[10][10], adj[10][10]; inline int min(int a, int b){ return (a<b)?a:b; } main() { int vert, edge, i, j, k, c; cout << "Enter no of vertices: "; cin >> vert; cout << "Enter no of edges: "; cin >> edge; cout << "Enter the EDGE Costs:\n"; for (k = 1; k <= edge; k++) { //take the input and store it into adj and cost matrix cin >> i >> j >> c; adj[i][j] = cost[i][j] = c; } for (i = 1; i <= vert; i++) for (j = 1; j <= vert; j++) { if (adj[i][j] == 0 && i != j) adj[i][j] = INF; //if there is no edge, put infinity } for (k = 1; k <= vert; k++) for (i = 1; i <= vert; i++) for (j = 1; j <= vert; j++) adj[i][j] = min(adj[i][j], adj[i][k] + adj[k][j]); //find minimum path from i to j through k cout << "Resultant adj matrix\n"; for (i = 1; i <= vert; i++) { for (j = 1; j <= vert; j++) { if (adj[i][j] != INF) cout << adj[i][j] << " "; } cout << "\n"; } }
আউটপুট
Enter no of vertices: 3 Enter no of edges: 5 Enter the EDGE Costs: 1 2 8 2 1 12 1 3 22 3 1 6 2 3 4 Resultant adj matrix 0 8 12 10 0 4 6 14 0