কম্পিউটার টিউটোরিয়াল

গ্রাফের জন্য ব্রেডথ ফার্স্ট সার্চ (BFS)

ব্রেডথ ফার্স্ট সার্চ (BFS) ট্রাভার্সাল একটি অ্যালগরিদম, যা একটি দেয়া গ্রাফের সকল নোড ভিজিট করতে ব্যবহৃত হয়। এই ট্রাভার্সাল অ্যালগরিদমে একটি নোড সিলেক্ট করা হয় এবং তারপর সকল অ্যাডজেসেন্ট নোড একে একে ভিজিট করা হয়। সকল অ্যাডজেসেন্ট ভার্টেক্স কম্প্লিট হলে, এটি আরও ভের্টেক্স চেক করতে চলে যায় এবং সেটার অ্যাডজেসেন্ট ভার্টেক্স আবার চেক করে।

গ্রাফের জন্য ব্রেডথ ফার্স্ট সার্চ (BFS)

এই অ্যালগরিদম ইমপ্লিমেন্ট করতে, আমাদের কিউ ডেটা স্ট্রাকচার ব্যবহার করতে হবে। সকল অ্যাডজেসেন্ট ভার্টেক্স কিউতে অ্যাড করা হয়, যখন সকল অ্যাডজেসেন্ট ভার্টেক্স কম্প্লিট হয়, তখন কিউ থেকে একটি আইটেম রিমুভ করা হয় এবং সেই ভার্টেক্স থেকে আবার ট্রাভার্সাল শুরু হয়।

গ্রাফে কখনও কখনও সাইকেল থাকতে পারে, তাই আমরা একটি অ্যারে ব্যবহার করব নোডটি ইতিমধ্যে ভিজিটেড কিনা তা মার্ক করার জন্য।

ইনপুট - গ্রাফের অ্যাডজেসেন্সি ম্যাট্রিক্স।

A B C D E F
A 0 1 1 1 0 0
B 1 0 0 1 1 0
C 1 0 0 1 0 1
D 1 1 1 0 1 1
E 0 1 0 1 0 1
F 0 0 1 1 1 0

আউটপুট - BFS ট্রাভার্সাল: B A D E C F

অ্যালগরিদম

bfs(vertices, start)

ইনপুট − ভার্টেক্সের লিস্ট, এবং স্টার্ট ভার্টেক্স।

আউটপুট − যদি গ্রাফ কানেক্টেড থাকে, তবে সকল নোড ট্রাভার্স করুন।

Begin
    define an empty queue que
    at first mark all nodes status as unvisited
    add the start vertex into the que
    while que is not empty, do
        delete item from que and set to u
        display the vertex u
        for all vertices i adjacent with u, do
            if vertices[i] is unvisited, then
                mark vertices[i] as temporarily visited
                add v into the queue
            done
        mark u as completely visited
    done
End

উদাহরণ (C++)

#include 
#include 
#define NODE 6
using namespace std;
typedef struct node{
    int val;
    int state; //status
}node;
int graph[NODE][NODE] = {
    {0, 1, 1, 1, 0, 0},
    {1, 0, 0, 1, 1, 0},
    {1, 0, 0, 1, 0, 1},
    {1, 1, 1, 0, 1, 1},
    {0, 1, 0, 1, 0, 1},
    {0, 0, 1, 1, 1, 0}
};
void bfs(node *vert, node s){
    node u;
    int i, j;
    queue que;
    for(i = 0; i < NODE; i++){
        vert[i].state = 0; //not visited
    }
    vert[s.val].state = 1;//visited
    que.push(s); //insert starting node
    while(!que.empty()){
        u = que.front(); //delete from queue and print
        que.pop();
        cout << char(u.val+'A') << " ";
        for(i = 0; i < NODE; i++){
            if(graph[i][u.val]){
                if(vert[i].state == 0){
                    vert[i].state = 1;
                    que.push(vert[i]);
                }
            }
        }
        u.state = 2;//completed for node u
    }
}
int main(){
    node vertices[NODE];
    node start;
    char s;
    for(int i = 0; i < NODE; i++){
        vertices[i].val = i;
    }
    s = 'B';//starting vertex B
    start.val = s-'A';
    cout << "BFS Traversal: ";
    bfs(vertices, start);
    cout << endl;
}

আউটপুট

BFS Traversal: B A D E C F
  1. গ্রাফের জন্য ব্রেডথ ফার্স্ট সার্চ (BFS)

  2. স্টার গ্রাফ যাচাই (Check For Star Graph)

  3. C++-এ ডিসকানেক্টেড গ্রাফের জন্য BFS

  4. ফেসবুক গ্রাফ সার্চের জন্য আপনার অ্যাকাউন্ট প্রাইভেসি প্রস্তুত করুন [সাপ্তাহিক ফেসবুক টিপস]