如何编程求1到n的全排列????

ytfitihc 2003-09-08 12:13:38
大家给个思路,,,谢谢
...全文
143 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
ttlb 2003-09-14
  • 打赏
  • 举报
回复
#include <iostream>
#include <algorithm>
using namespace std;

void perm(char a[], int m, int n)
{
if(m + 1 == n)
{
cout << a << endl;
}
else
{
for (int k = m; k < n; ++k)
{
swap(a[m], a[k]);
perm(a, m + 1, n);
swap(a[m], a[k]);
}
}
}

int main()
{
cout << "input characters: ";
char *pch = new char[100];
int i = 0;
for (i = 0; i < 100; ++i)
{
char ch = getchar();
if (ch == 10)
{
pch[i] = '\0';
break;
}
pch[i] = ch;
}
cout << pch << endl;
perm(pch, 0, i);
return 0;
}
sunux 2003-09-14
  • 打赏
  • 举报
回复
不用递归的方法
1>第一个是1,2,3...n
2>设第M个是a1,a2,a3...an
3>t=2,while(M % t! == 0) t++; (t!是t的阶乘)
4>如果at比a1..at-1都大,则at与a1...at-1中最小的交换,得出第 M+1行
否则选a1..an-1中大于at的最小值 与 at交换,得出第M+1行
leafsax 2003-09-13
  • 打赏
  • 举报
回复
almost all algothems books gives the answer!
you can find one easily.
dddd8888 2003-09-13
  • 打赏
  • 举报
回复
#include <iostream>
using namespace std;

void swap(int& a, int& b)
{
int temp = a;
a = b;
b = temp;
}

void perm(int a[], int m, int n)
{
if (m == n)
{
for (int i=0; i<=m; i++)
{
cout << a[i] << " ";
}
cout << endl;
}
else
{
int k = m;
for (int j=k; j<=n; j++)
{
swap(a[j], a[k]);
perm(a, m + 1, n);
swap(a[j], a[k]);
}
}
}

void main()
{
int a[5] = {1, 2, 3, 4, 5};
perm(a, 0, 4);
}
watchcat 2003-09-08
  • 打赏
  • 举报
回复
可以考虑排列的生成算法
sakurar 2003-09-08
  • 打赏
  • 举报
回复

#include <stdio.h>
#include <windows.h>

#define SafeDelete(SRC) if(SRC){delete SRC;SRC = 0;}

void sort(BYTE level, const BYTE Count, BYTE* pUSE, char* pBUFFER)
{
BYTE mark = level + 1;

for(BYTE i = 0; i < Count; i++ )
{
if( pUSE[i] == 0 )
{

pUSE[i] = mark;
pBUFFER[i] = '0' + mark;

if( mark < Count )
{
sort( mark, Count, pUSE, pBUFFER );
}

pUSE[i] = 0;
}
}

if( mark == Count )
{
printf("\n>%s",pBUFFER);
}
}


void ListSort(BYTE n)
{

BYTE* use = new BYTE[ n ];
char* buffer = new char[ n + 1 ];

ZeroMemory( buffer, n + 1 );
ZeroMemory( use, n );

sort( 0, n, use, buffer );

SafeDelete( use );
SafeDelete( buffer );
}

void main(void)
{
ListSort(2);
getchar();
}

24,855

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 工具平台和程序库
社区管理员
  • 工具平台和程序库社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧