মডিউল ১৩_৯ঃ এডজেসেন্সি লিস্ট টু এজ লিস্ট

আমরা এখন দেখবো কিভাবে এডজেসেন্সি লিস্ট থেকে এজ লিস্ট এ কনভার্ট করতে হয়।

এই গ্রাফ এর এডজেসেন্সি লিস্ট হবেঃ

০->১

১->২

২->৩

৩->১

তাহলে আমরা আবার একটা এজ রাখার জন্য ভেক্টর নেব। আমরা চাইলে pair এর ভেক্টর ও নিতে পারি আবার চাইলে এজ রাখার জন্য একটা অব্জেক্ট ক্লাস বানিয়ে রাখতে পারি যেখানে দুই নোড ও তাদের কস্টকে রাখা যেতে পারে।

// Some code
class Edge
{
public:
    int u, v, w;
    Edge(int u, int v, int w)
    {
        this->u = u;
        this->v = v;
        this->w = w;
    }
};

এবার আমরা প্রত্যেক নোড এর লিস্ট এ যাবো ও সেই নোড এর লিস্ট এর প্রতি ভ্যালু ও তাদের কস্টকে বের করে এনে এজ ক্লাস এর একটি অব্জেক্ট বানিয়ে এজ ভেক্টরে পুশ করে দিব। তাহলেই হয়ে যাবে আমাদের এজ লিস্ট রেডি।

// Some code
    vector<Edge> edgeList;
    for (int i = 0; i < n; i++)
    {
        for (pair<int, int> child : v[i])
        {
            int childNode = child.first;
            int cost = child.second;
            edgeList.push_back(Edge(i, childNode, cost));
        }
    }

সম্পূর্ণ কোডঃ

// Some code
#include <bits/stdc++.h>
using namespace std;
class Edge
{
public:
    int u, v, w;
    Edge(int u, int v, int w)
    {
        this->u = u;
        this->v = v;
        this->w = w;
    }
};
int main()
{
    int n, e;
    cin >> n >> e;
    vector<pair<int, int>> v[n];
    while (e--)
    {
        int a, b, c;
        cin >> a >> b >> c;
        v[a].push_back({b, c});
    }
    vector<Edge> edgeList;
    for (int i = 0; i < n; i++)
    {
        for (pair<int, int> child : v[i])
        {
            int childNode = child.first;
            int cost = child.second;
            edgeList.push_back(Edge(i, childNode, cost));
        }
    }
    for (Edge edge : edgeList)
    {
        cout << edge.u << " " << edge.v << " " << edge.w << endl;
    }
    return 0;
}

Last updated