// Some code ll n, e; cin >> n >> e; ll adj[n][n];for (int i =0; i < n; i++) {for (int j =0; j < n; j++) {adj[i][j] = INT_MAX;if (i == j)adj[i][j] =0; } }
এখানে গ্রাফের এডজেসেন্সি ম্যাট্রিক্সটা ইনিশিয়ালাইজ করলাম।
// Some codewhile (e--) {int a, b, c; cin >> a >> b >> c;adj[a][b] = c; }
এবার এজ ইনপুট নিয়ে সেটার ভ্যালু এডজেসেন্সি ম্যাট্রিক্স এ রাখলাম।
// Some codefor (int k =0; k < n; k++) {for (int i =0; i < n; i++) {for (int j =0; j < n; j++) {if (adj[i][k] +adj[k][j] <adj[i][j]) {adj[i][j] =adj[i][k] +adj[k][j]; } } } }
এখন আসল কাজটা করব। এখানে k এর লুপটা সেই মধ্যস্ততাকারী নোডকে চুজ করবে। আর i আর j লুপ যথাক্রমে সোর্স আর ডেস্টিনেশন হিসেবে কাজ করবে। আর রিল্যাক্স এর লজিকটা হচ্ছে যদি i->k + k->j < i->j হয় তাহলে তা আপডেট হবে।
সম্পূর্ণ কোডঃ
// Some code#include<bits/stdc++.h>#definelllonglongintusingnamespace std;intmain(){ ll n, e; cin >> n >> e; ll adj[n][n];for (int i =0; i < n; i++) {for (int j =0; j < n; j++) {adj[i][j] = INT_MAX;if (i == j)adj[i][j] =0; } }while (e--) {int a, b, c; cin >> a >> b >> c;adj[a][b] = c; }for (int k =0; k < n; k++) {for (int i =0; i < n; i++) {for (int j =0; j < n; j++) {if (adj[i][k] +adj[k][j] <adj[i][j]) {adj[i][j] =adj[i][k] +adj[k][j]; } } } } // cout << "AFTER" << endl; // for (int i = 0; i < n; i++) // { // for (int j = 0; j < n; j++) // { // if (adj[i][j] == INT_MAX) // cout << "INF "; // else // cout << adj[i][j] << " "; // } // cout << endl; // }for (int i =0; i < n; i++) {if (adj[i][i] <0) { cout <<"Cycle detected"<< endl;break; } }return0;}