全排列,但是怎么用程序求出全排列

全排列,但是怎么用程序求出全排列,第1张

#include "iostream"

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-8

a = ['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)

运行结果:


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/8008873.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-12
下一篇 2023-04-12

发表评论

登录后才能评论

评论列表(0条)

保存