using namespace std
void permutation(int* arr,int k,int m)
{
int i,j
if(k == m)
{
for(i=0i<=mi++)
cout<<arr[i]
cout <<endl
}
else
{
for( j=kj<=mj++)
{
swap(arr[j], arr[k])
permutation(arr, k+1, m)
swap(arr[j], arr[k])
}
}
}
int main(void)
{
int a[9] = {1,2,3,4,5,6,7,8,9}
cout <<"全排列结果如下:" <<endl
permutation(a, 0, 8)
return 0
}
你的全排列算法不成立,我给你一个全排列的例子,你看看吧.
#include<iostream>#include<cstring>
using namespace std
static int count=0
void Swap(char *a,char *b)
{
char tmp=*a
*a=*b
*b=tmp
}
void AllRange(char *pszStr,int k,int m)
{
if(k==m)
{
count++
cout<<pszStr<<endl
}
else
{
for(int i=ki<=mi++)
{
Swap(pszStr+i,pszStr+k)
AllRange(pszStr,k+1,m)
Swap(pszStr+i,pszStr+k)
}
}
}
int main()
{
int n
cin>>n
char *szTextStr
sprintf(szTextStr,"%d",n)
cout<<szTextStr<<"的全排列如下:"<<endl
AllRange(szTextStr,0,strlen(szTextStr)-1)
cout<<"共"<<count<<"个"<<endl
return 0
}
可以使用回溯法进行全排列,代码如下:
#coding=utf-8a = ['a', 'b', 'c', 'd', 'e', 'f']
def check(b, index, ch):
for i in b:
if i == ch:
return False
return True
def enum(b, index):
if index == len(a):
print(b)
else:
for q in a:
if check(b, index, q):
b = b + q
enum(b, index + 1)
b = b[0:-1]
if __name__ == '__main__':
b = ''
enum(b, 0)
运行结果:
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)