#搜索与回溯 vol.01 n个整数中取出r个进行排列

题目

设有n个整数的集合{1,2,···,n}
从中任意取出r个数进行排列(r < n)
试求出所有排列的组合

#include <iostream>
#include <iomanip>
using namespace std;

int num = 0, a[10001] = {0}, n, r;
bool b[10001] = {0};
int search(int);
int print();

int main(){
	cin >> n >> r;
	search(1);
	cout << "Number: " << num << endl;	
}

int search(int k){
	for(int i = 1; i <= n; i ++){
		if(!b[i]){
			a[k] = i;
			b[i] = 1;
			if(k == r){
				print();
			}
			else{
				search(k + 1);
			}
			b[i] = 0;
		}
	} 
}

int print(){
	num ++;
	for(int i = 1; i <= r; i ++){
		cout << setw(3) << a[i];
	}
	cout << endl;
}
posted @ 2020-10-28 07:42  Cinxar  阅读(399)  评论(0)    收藏  举报