C语言求全排列

C语言求全排列,第1张

像for(int i=0i<ni++)c语雹让言里变量定义不能这样吧。要把int定义前面哪销的吧。把所李肆游有变量定义改了,用C-Free程序运行是正常的。

#include <stdio.h>

#define N 10

swap(int *p,int *q)

{

int temp

temp=*p

*p=*q

*q=temp

}

sort(int a[],int k,int n)

{ int temp1,temp2,j,i

if(k==n)

{

for( i=0i<=ni++)

printf("%d",a[i])

printf("\n")

}

else{

for(j=kj<=nj++)

{

swap(&a[k],&a[j])

sort(a,k+1,n)

swap(&a[k],&a[j])

}

}

}

main()

{

int a[N]

int n,i

scanf("%d",&n)

for(i=0i<ni++)

scanf("%d",&a[i])

sort(a,0,n-1)

}

基本思想是用回溯法来搜索每一种排列

不过楼主对问题的说明不是很详细,所以我只好写个普适性比较大的了

下面这个程序读取一行字符串,然后对该字符串中的所有字符进行全排列输模厅出

注:输入的字符串不要太好族长,因为不存在能够在短时间内输出全排列的算法

#include <stdio.h>

#include <string.h>

#include <memory.h>

int m//记录字符串长度

int n//记录字符串中的字符种类数

char map[256]//记录是哪几种字符

int count[256]//记录每种字符有多少个

void Make_Map(char *str)//统计字符串的相关信息

{

int s[256]

int i

memset(s,0,sizeof(s))

memset(count,0,sizeof(count))

m=strlen(str)

while(*str)

{

s[*str]++

str++

}

n=0

for (i=0i<256i++)

if (s[i])

{

map[n]=i

count[n]=s[i]

n++

}

}

int stack[1000]//递归用的栈,并记录当前生成的排列

void Find(int depth)//递归式回溯法生成全排列

{

if (depth==m)

{

int i

for (i=0i<友码弊depthi++) putchar(map[stack[i]])

putchar('\n')

}

else

{

int i

for (i=0i<ni++)

if (count[i])

{

stack[depth]=i

count[i]--

Find(depth+1)

count[i]++

}

}

}

main()

{

char str[1000]

gets(str)

Make_Map(str)

Find(0)

}


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

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

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

发表评论

登录后才能评论

评论列表(0条)

保存