《算法C語言實現》————快速-查找算法(quick-find algorithm)


  算法基礎是一個整型數組,當且僅當第p個元素和第q個元素相等時,p和q時連通的。初始時,數組中的第i個元素的值為i,0<=i<N,為實現p與q的合並操作,我們遍歷數組,把所有名為p的元素值改為q。我們也可以選擇另外一種方式,把所有名為q的元素改為p。

  這個程序從標准輸入讀取小於N的非負整數對序列(對p-q表示"把對象β 連接到q"),並且輸出還未連通的輸入對。程序中使用數組id,每個元素表示一個對象,且具有以下性質,當且僅當p和q時連通的,id[p]和id[q]想等。為簡化起見,定義N為編譯時的常數。另一方面,也可以從輸入得到它,並動態地為它分配id數組。

 

 

/*
@file   quickfind.c
@brief  利用快速查找算法來解決小規模的連通性問題
*/
#include <stdio.h>
#define N 1000

int main(void)
{
    int i, p, q, t;
    int id[N];
    //初始化對象集合中元素的初始值
    for (i = 0; i < N; i++) id[i] = i;
    //循環讀入整數對
    while (scanf_s("%d-%d", &p, &q) == 2)
    {
        //如果對象p與q是連通的,則從標准輸入讀取下一對整數對
        if (id[p] == id[q]) continue;
        //如果id[p]與id[q]的值不相等,則說明p-q是新對
        //則將所有原本與id[p]元素值相等的所有元素連接到q
        for (t = id[p], i = 0; i < N; i++)
        {
            if (id[i] == t)
                id[i] = id[q];
        }
        //因為p-q是新對,所以輸出這個對
        printf("New pair: %d-%d\n", p, q);
    }

    return 0;
}

沒明白這是干什么用的,就是遍歷,賦值而已


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM