社区
数据结构与算法
帖子详情
1--N的全排列,谁有算法,急用
IloveMint
2002-07-10 08:37:44
同上
...全文
33
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;
}
}
}
完整视频-coursera公开课 普林斯顿
算法
ⅠⅡ部分
本资源为BT文件,下载速度快,如果P2P工具支持下载字幕可以进行下载 Coursera上的公开课,普林斯顿大学教授Robert Sedgewick主讲《Algorithms》
算法
Java实现 课程网站http://algs4.cs.princeton.edu/home/ 视频一个两部分,
算法
(一)主要集中在基础的数据结构、排序、查找
算法
。 相关主题有:并查集
算法
,二分查找,栈,队列,背包,插入排序,选择排序,希尔排序,快速排序, 三切分快排,归并排序,堆排序,二分堆,二分查找树,红黑树,链表,线性哈希表,Graham扫描,kd树。
算法
(二)主要讲解图论和字符串处理的相关
算法
。相关主题有:深度优先搜索,宽度优先搜索,拓扑排序,Kosaraju-Sharir
算法
,Kruskal
算法
,Prim
算法
,Dijkistra
算法
,Bellman-Ford
算法
, Ford-Fulkerson
算法
, LSD radix sort
算法
, MSD radix sort
算法
, 3-way radix 快排
算法
, 多路尝试法, 三元查找尝试法, Knuth-Morris-Pratt
算法
, Boyer-Moore
算法
, Rabin-Karp
算法
, 正则匹配, run-length编码, Huffman编码, LZW压缩, 还有Burrows-Wheeler变换。
CRC-16 和 CRC-32
算法
CRC-16 和 CRC-32
算法
的汇编源代码
Algorithms.
算法
概论.习题答案
Algorithms.
算法
概论.习题试解
几个推荐
算法
的java实现
java实现的几个推荐
算法
:slopeone SVD,RSVD,ItemNeighborSVD 内有readme,相关内容在blog.csdn.net/lgnlgn
java数百种
算法
实现
java数百种
算法
实现
数据结构与算法
33,027
社区成员
35,335
社区内容
发帖
与我相关
我的任务
数据结构与算法
数据结构与算法相关内容讨论专区
复制链接
扫一扫
分享
社区描述
数据结构与算法相关内容讨论专区
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章