信息學奧賽一本通 1317:【例5.2】組合的輸出

題目鏈接:點擊這裏
在這裏插入圖片描述

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>

using namespace std;

int ans[30];
bool vis[30];
int n,r;

void dfs(int x)
{
	if(x==r+1)   //如果到了不存在的位置,就打印退出
	{
		for(int i=1;i<=r;i++)  //打印
			printf("%3d",ans[i]);
		printf("\n");
		return ;
	}
	
	for(int i=1;i<=n;i++)   //有1~n個數(卡片)可選
	{
		if(i>ans[x-1]&&vis[i]==false)  //如果該數(卡片)還沒有被使用
		{
			ans[x] = i;  //將該數(卡片)放到位置上
			vis[i] = true;  //標記爲已使用
			dfs(x+1);  //執行下一步,在下一個位置再次執行
			vis[i] = false;  //將嘗試過的數(卡片)收回
		}
	}
}

int main()
{
	scanf("%d%d",&n,&r);
	dfs(1);
	return 0;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章