中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

c語言排列組合算法怎么實現

小億
102
2023-10-30 11:57:04
欄目: 編程語言

C語言排列組合算法可以通過遞歸實現。下面是一個示例代碼:

#include <stdio.h>

void combination(int arr[], int data[], int start, int end, int index, int r) {
    if (index == r) {
        for (int i = 0; i < r; i++) {
            printf("%d ", data[i]);
        }
        printf("\n");
        return;
    }
    
    for (int i = start; i <= end && end - i + 1 >= r - index; i++) {
        data[index] = arr[i];
        combination(arr, data, i + 1, end, index + 1, r);
    }
}

void permutation(int arr[], int data[], int start, int end) {
    if (start == end) {
        for (int i = 0; i <= end; i++) {
            printf("%d ", data[i]);
        }
        printf("\n");
        return;
    }
    
    for (int i = start; i <= end; i++) {
        int temp = arr[start];
        arr[start] = arr[i];
        arr[i] = temp;
        
        permutation(arr, data, start + 1, end);
        
        temp = arr[start];
        arr[start] = arr[i];
        arr[i] = temp;
    }
}

int main() {
    int arr[] = {1, 2, 3};
    int n = sizeof(arr) / sizeof(arr[0]);
    int r = 2;
    int data[r];
    
    printf("Combination:\n");
    combination(arr, data, 0, n - 1, 0, r);
    
    printf("Permutation:\n");
    permutation(arr, data, 0, n - 1);
    
    return 0;
}

在上面的代碼中,combination函數用來計算組合,permutation函數用來計算排列。arr數組存儲原始數據,data數組存儲當前的組合或排列結果。startend參數用來指定當前需要處理的數組范圍,index參數用來指定當前已經選擇了幾個數。r參數用來指定需要選擇多少個數進行組合或排列。

combination函數中,我們使用了回溯法,通過遞歸實現組合算法。在每一層遞歸中,我們從startend的范圍內選擇一個數,并將其保存到data數組中,然后遞歸調用combination函數,繼續選擇下一個數,直到選擇了r個數為止。

permutation函數中,我們使用了回溯法,通過遞歸實現排列算法。在每一層遞歸中,我們將arr[start]arr[i]交換位置,然后遞歸調用permutation函數,繼續處理下一個位置,直到處理完了所有位置為止。

main函數中,我們定義了一個示例數組arr和選擇的個數r,并調用combinationpermutation函數進行計算,并輸出結果。

0
沈丘县| 安徽省| 漳平市| 衡南县| 福泉市| 灵山县| 增城市| 阿城市| 同德县| 灌阳县| 南昌市| 中超| 汝城县| 图片| 龙江县| 公安县| 武强县| 城口县| 山东| 达拉特旗| 广州市| 九龙县| 个旧市| 同仁县| 瑞安市| 西城区| 涞源县| 天津市| 涞水县| 千阳县| 泸州市| 东台市| 女性| 远安县| 五指山市| 仲巴县| 龙岩市| 中卫市| 广丰县| 班戈县| 阿城市|