perm.cpp

来自「利用回溯法求解背包问题和全排列的算法」· C++ 代码 · 共 71 行

CPP
71
字号
#include "iostream.h" 
class pailie
{
  friend   int pailieh(int);
  private:  bool kk(int i); 
	    	void backtrack(int);
	        int *x;
	        int  n;
			int sum;
};
bool pailie::kk(int n)
{  
    if (n!=1)
    {
		for (int i=1;i<n;i++)
	
	{
		if (x[i]==x[n])
		return false;	
	}
		return true;
    }
	 else
		return true;

}
void pailie::backtrack(int t)
{

	if (t>n)
	{   
		sum+=1;
		for (int i=1;i<=n;i++)
		{
			cout<<x[i];
		}
	    	cout<<endl;
	}
    for (int j=1;j<=n;j++)
    {
		x[t]=j;
		if(kk(t))
		{
	    	backtrack(t+1);
		}
    }
	
}
int pailieh(int n)
{	
	pailie A;
	A.n=n;
	A.sum=0;
	int *p=new int[n+1];
	for (int i=0;i<=n;i++)
	{
		p[i]=0;
	}
    A.x=p;
	A.backtrack(1);
	return A.sum;
  

}
void main()
{   

  cout<<pailieh(5);
 
}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?