专栏文章

递归回溯

P1706题解参与者 1已保存评论 0

文章操作

快速查看文章及其快照的属性,并进行相关操作。

当前评论
0 条
当前快照
1 份
快照标识符
@miohbqjo
此快照首次捕获于
2025/12/02 19:13
3 个月前
此快照最后确认于
2025/12/02 19:13
3 个月前
查看原文
**暴力循环函数,判断是否在已经存在,不存在则进入递归
CPP
void combination(int n,vector<int>&a)
{	
if(a.size()==n)		
{			
for(int i=0;i<a.size();i++) cout<<setw(5)<<a[i];			
cout<<endl;			
return;		
}	
for(int i=1;i<=n;i++)	
{		
if(flag(a,i))		
{			
a.push_back(i);	    	
combination(n,a);			
a.pop_back();		
 } 	
}
}
flag函数用于判断容器内是否已经存在别的元素
CPP
bool flag(vector<int>&a,int i)
{	
for(int j=0;j<a.size();j++)	
{		
if(a[j]==i) return false;	
}	
return true;
}
最后是AC代码:
CPP
#include<iostream>
#include<vector>
#include<iomanip>
using namespace std;
bool flag(vector<int>&a,int i)
{
	for(int j=0;j<a.size();j++)
	{
		if(a[j]==i) return false;
	}
	return true;
}
void combination(int n,vector<int>&a)
{
	if(a.size()==n)
		{
			for(int i=0;i<a.size();i++) cout<<setw(5)<<a[i];
			cout<<endl;
			return;
		}
	for(int i=1;i<=n;i++)
	{
		if(flag(a,i))
		{
			a.push_back(i);
	    	combination(n,a);
			a.pop_back();
		 } 
	}
}
int main()
{
	int n;cin>>n;
	vector<int> a;
	combination(n,a);
 } 

评论

0 条评论,欢迎与作者交流。

正在加载评论...