আমরা একটি গ্রাফ ক্লাস তৈরি করব যা ওয়েট এবং ডাইরেক্টেড/আনডাইরেক্টেড দুটি টাইপ সাপোর্ট করবে। এটি এডজেসেন্সি লিস্ট ব্যবহার করে বাস্তবায়ন করা হবে। আরও এডভান্সড কনসেপ্টের দিকে যাওয়ার সাথে সাথে ওয়েট এবং গ্রাফের ডাইরেক্টেড নেচার কাজে লাগবে।
এডজেসেন্সি লিস্ট হলো আলাদা লিস্টগুলোর একটি অ্যারে A। অ্যারে প্রতিটি এলিমেন্ট Ai হলো একটি লিস্ট, যেটি সেই ভারটেক্সগুলোক ধারণ করে যা ভারটেক্স i-এর সাথে এডজেসেন্ট। আমরা এটি ২টি মেম্বার দিয়ে ডিফাইন করছি: nodes এবং edges।
আসুন গ্রাফ ক্লাস সেট আপ করি আমাদের ক্লাস ডিফাইন করে এবং কিছু মেথড দিয়ে যা আমরা নোড এবং এজ যোগ করতে ব্যবহার করব।
আমরা প্রাথমিকভাবে নিচের মেথডগুলো ডিফাইন করব:
- addNode: গ্রাফে একটি নোড যোগ করে
- addEdge: গ্রাফে একটি আনডাইরেক্টেড এজ যোগ করে
- addDirectedEdge: একটি ডাইরেক্টেড এজ যোগ করে
উদাহরণ
class Graph {
constructor() {
this.edges = {};
this.nodes = [];
}
addNode(node) {
this.nodes.push(node);
this.edges[node] = [];
}
addEdge(node1, node2) {
this.edges[node1].push(node2);
this.edges[node2].push(node1);
}
addDirectedEdge(node1, node2) {
this.edges[node1].push(node2);
}
display() {
let graph = "";
this.nodes.forEach(node => {
graph += node + "->" + this.edges[node].join(", ") + "\n";
});
console.log(graph);
}
}
আপনি নিচের কোড দিয়ে এই মেথডগুলো এবং আমাদের ক্লাসটি পরীক্ষা করতে পারেন:
উদাহরণ
let g = new Graph();
g.addNode("A");
g.addNode("B");
g.addNode("C");
g.addNode("D");
g.addNode("E");
g.addEdge("A", "C");
g.addEdge("A", "B");
g.addDirectedEdge("A", "D");
g.addEdge("D", "E");
g.display();
আউটপুট
এটি নিচের আউটপুট দেবে:
A->C, B, D B->A C->A D->E E->D