الگوریتم تطابق بیشینه در گراف دوبخشی

الگوریتم زیر با گرفتن ماتریس مجاورت، یالهای تطابق بیشینه را به دست میدهد .

روش کار الگوریتم بدین صورت است که برای هر رأس در صورتی تا به حال برایش جفتی پیدا نشده باشد یک مسیر M-افزوده از آن رأس پیدا می‌کند، سپس با تعویض یالهای مسیر افزوده اندازه گراف را افزایش میدهد .

ورودی و خروجی

e ماتریس مجاورت گراف دوبخشی است. N تعداد رأسهای بخش اول گراف و M تعداد راسهای بخش دوم گراف است.

بعد از پایان الگوریتم آرگومان [match[i جفت رأس i در بخش اول را بدست می‌دهد.

لازم به ذکر است که برنامه زیر تحت استاندارد زبان برنامه نویسی ++C نوشته شده‌است .

الگوریتم

bool find (int node) {
    if (mark[node])
        return false;
    mark[node] = true;
    for (int i = 1; i <= m; i++) {
        if (e[node][i] && match2[i] == 0) {
            match2[i] = node;
            match[node] = i;
            mark[node] = false;
            return true;
        }
    }
    for (int i=1; i<=m; i++) {
        if (e[node][i] && find(match2[i])) {
            match[node] = i;
            match2[i] = node;
            mark[node] = false;
            return true;
        }
    }
    mark[node] = false;
    return false;
}

void matching() {
    for (int i = 1; i <= n; i++)
    if (match[i] == 0)
        find(i);
}

منابع

    • کتاب آشنایی با نظریه گراف اثر دوگلاس بی.وست
    This article is issued from Wikipedia. The text is licensed under Creative Commons - Attribution - Sharealike. Additional terms may apply for the media files.