排列組合算法實現

排列數:

#include <iostream>
using namespace std;

int n, k;
int a[25] = { 0 };
int b[25] = { 0 };
int vis[25] = { 0 };

void dfs(int step) {
	if (step == k) {
		for (int i = 0; i < k; i++)
			cout << b[i] << " ";
		cout << endl;
	}
	else {
		for (int i = 0; i < n; i++)
			if (vis[i] == 0) {
				b[step] = a[i];
				vis[i] = 1;
				dfs(step + 1);
				vis[i] = 0;
			}
	}
}

int main() {
	cin >> n >> k;
	for (int i = 0; i < n; i++)
		cin >> a[i];
	dfs(0);
	return 0;
}

組合數:

#include <iostream>
using namespace std;

int n, k;
int a[25] = { 0 };
int b[25] = { 0 };
int vis[25] = { 0 };

void dfs(int step,int startx) {
    if (step == k) {
        for (int i = 0; i < k; i++)
            cout << b[i] << " ";
        cout << endl;
    }
    for (int i = startx; i < n; i++) {
        if (vis[i] == 0) {
            b[step] = a[i];
            vis[i] = 1;
            dfs(step + 1, i + 1);
            vis[i] = 0;
        }
    }
}

int main() {
    cin >> n >> k;
    for (int i = 0; i < n; i++)
        cin >> a[i];
    dfs(0,0);
    return 0;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章