题解 P1157 【组合的输出】

啦啦啦,最简单的电风扇(dfs)(居然有大佬说不能用递归?!)

懒得写BFS,太繁琐了。

程序不喜勿喷

#include<bits/stdc++.h>
using namespace std;
int f[100];//数组484开大了点(记录输出序列)
bool bz[100];//记录是否取过
int n,r;
void dfs(int l,int now)
{
	if(l==r) //如果搜完
	{
		for(int i=1;i<=l;i++) printf("%3d",f[i]);//格式输出
		cout<<endl;
		return;
	}
	for(int i=now+1;i<=n;i++)
	{
		if(!bz[i]) //如果没取过
		{
			f[l+1]=i;//填入数组
			bz[i]=1;//标记
			dfs(l+1,i);//递归
			f[l+1]=0;//抹掉标记,回溯
			bz[i]=0;
		}
	}
}
int main()
{
	cin>>n>>r;
	dfs(0,0);//简短的主程序~QwQ
	return 0;
}

Byebye~

posted @ 2020-03-21 21:24  Laser_Crystal  阅读(307)  评论(0编辑  收藏  举报