社区
数据结构与算法
帖子详情
1--N的全排列,谁有算法,急用
IloveMint
2002-07-10 08:37:44
同上
...全文
38
3
打赏
收藏
1--N的全排列,谁有算法,急用
同上
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用AI写文章
3 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
LeeMaRS
2002-07-10
打赏
举报
回复
http://www.csdn.net/expert/topic/843/843002.xml?temp=.4877893
这里有算法 还有讲解.
laughcry2002
2002-07-10
打赏
举报
回复
这是我刚写的一个:
/* COPYRIGHT 2002 by LaughCry */
/*
Enumerate all the N! permutation(s) of 0..N-1
*/
#include <stdio.h>
#define N 4
#define TRUE 1
#define FALSE 0
void main(void)
{
char used[N], perm[N], i, n;
long cnt = 0;
int top = -1;
for(i=0; i<N; i++) used[i] = FALSE;
while(1){
for(i=0; i<N; i++)
if(!used[i]){
perm[++top] = i; /* push i */
used[i] = TRUE;
}
/* print_out */
printf("\n%-8ld", ++cnt);
for(i=0; i<N; i++) printf("%d ", perm[i]);
do{
if(top == -1) goto done; /* end */
n = perm[top--]; /* pop n */
used[n] = FALSE;
for(i = n+1; i < N && used[i]; i++);
}while(i >= N); /* not found */
perm[++top] = i; /* push a num */
used[i] = TRUE;
}
done:
printf("\ntotal: %ld\n", cnt);
}
laughcry2002
2002-07-10
打赏
举报
回复
这是我师弟做的一个程序:
/*
* 求N个数的所有可能的排列(共N!种)并输出。
*/
#include "stdio.h"
struct num{
int n;
struct num *nextPtr;
};
typedef struct num NUM;
typedef NUM * NUMPTR;
/*总根-- 最后一个数a={1}*/
NUM a={1};
NUMPTR zongPtr,endPtr,headPtr;
void putout(NUMPTR);
void freeout(NUMPTR);
void move(NUMPTR);
void move3(NUMPTR);
void change(NUMPTR);
int num,k=0;
main()
{
int i;
NUMPTR deadPtr,newPtr,startPtr;
headPtr=(NUMPTR)malloc(sizeof(NUM));
startPtr=&a;
printf("Enter the number:")
scanf("%ld",&num);
for(i=num;i>=2;i--)
{
newPtr=(NUMPTR)malloc(sizeof(NUM));
startPtr->nextPtr=newPtr;
newPtr->n=i;
startPtr=newPtr;
}
startPtr->nextPtr=&a;
endPtr=&a;
zongPtr=a.nextPtr;
/*领头head*/
headPtr->nextPtr=zongPtr;
move3(headPtr);
freeout(headPtr);
printf("\n%d groups!\n",k);
return 0;
}
/*打印*/
void putout(NUMPTR nPtr)
{
int i;
NUMPTR putPtr;
putPtr=nPtr;
k++;
for(i=0;i<num;i++){
putPtr=putPtr->nextPtr;
printf("%ld ",putPtr->n);
}
printf("\t");
}
/**释放链表*/
void freeout(NUMPTR freePtr)
{
NUMPTR deadPtr;
int i;
for(i=0;i<=num;i++){
deadPtr=freePtr;
freePtr=freePtr->nextPtr;
free(deadPtr);
}
}
/*最后三个数的全排列*/
void move(NUMPTR startPtr)
{
int temp=startPtr->n;
if(startPtr->nextPtr==endPtr)
change(startPtr);
else
{
do{
move(startPtr->nextPtr);
putout(headPtr);
change(startPtr);
putout(headPtr);
}while(startPtr->n!=temp);
}
}
/*此函数用于最后三个数首尾交换*/
void change(NUMPTR startPtr)
{
int temp=startPtr->n;
startPtr->n=endPtr->n;
endPtr->n=temp;
}
/*大于3个数时*/
void move3(NUMPTR startPtr)
{
int temp=startPtr->nextPtr->n;
if(startPtr->nextPtr->nextPtr->nextPtr==endPtr)
move(startPtr->nextPtr);
else
while(1)
{
move3(startPtr->nextPtr);
/*转一位*/
endPtr->nextPtr=startPtr->nextPtr;
startPtr->nextPtr=startPtr->nextPtr->nextPtr;
endPtr=endPtr->nextPtr;
if(startPtr->nextPtr->n==temp)
{
/*向前转一位*/
endPtr->nextPtr=startPtr;
break;
}
}
}
java数据结构与
算法
刷题-----LeetCode47.
全排列
II
【代码】java数据结构与
算法
刷题-----LeetCode47.
全排列
II。
递归分治 --- 例题1.
全排列
递归分治 — 例题1.
全排列
一.问题描述 设计一个递归
算法
生成n个元素{r1, r2, … , rn}的
全排列
. 此题与力扣主站第46题 —
全排列
相同,以及力扣主站第47题 —
全排列
Ⅱ 二.解题思路 设R={r1,r2…,rn}是要进行排列的n个元素,Ri=R-{ri}.集合X中的元素的
全排列
记为Perm(X).(ri)Perm(X)表示在
全排列
X的每个排列前加上前缀ri得到的排列. R的
全排列
可归纳定义为如下: 当n==1时,Perm®=®,其中r是集合R中唯一的元素. 当n > 1时,P
使用可移动元素法(活动元素法)生成1~n的
全排列
(Java实现)
使用可移动元素法(活动元素法)生成1~n的
全排列
(Java实现)
全排列
的概念
算法
思想代码
全排列
的概念 给定一个整数n,我们将1-n这n个数字进行任意序列的排列,如果使用穷举法,显然时间复杂度是O(n!),很不经济,在《组合数学》(Richard A.Brualdi)数中介绍了一种可移动元素法生成n个数的
全排列
的方法。这篇文章使用Java语言实现这种
算法
。
算法
思想 首先使用数组存放初始序列,并为...
JS使用递归简单实现--数组的
全排列
JS使用递归简单实现--数组的
全排列
基础
算法
-递归-
全排列
【小韦同学@基础
算法
-递归-
全排列
】 题目: 描述 一般把 1 ~ n 这 n 个整数按某个顺序摆放的结果称为这 n 个整数的一个排列,而
全排列
指这 n 个整数能形成的所有排列。 例如对于 1,2,3 这三个整数来说,(1, 2, 3)、(1, 3, 2)、(2, 1, 3)、(2, 3, 1)、(3, 1, 2)、(3, 2, 1) 就是 1 ~ 3 的
全排列
。 输入 输入一个正整数 n。 输出...
数据结构与算法
33,027
社区成员
35,336
社区内容
发帖
与我相关
我的任务
数据结构与算法
数据结构与算法相关内容讨论专区
复制链接
扫一扫
分享
社区描述
数据结构与算法相关内容讨论专区
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章