C语言名题百则的字典序排列程序好有点问题,改了一下代码如下:
#include <stdio.h>
#include <stdlib.h>
#include<iostream>
#define MAXSIZE 20
void swap(int &a, int &b)
{
int tmp;
tmp = a; a = b; b = tmp;
}
void reverse(int L, int R, int perm[])
{
for (int i = L, j = R; i < j; i++, j--)
{
swap(perm[i], perm[j]);
}
}
void display(int perm[], int R)
{
for (int i = 0; i <= R; i++)
{
std::cout << perm[i] << std::ends;
}
std::cout << std::endl;
}
void again(int perm[], int L, int R)//排列L到R并从首项 打印
{
int i = R;
if (L == R)
{
display(perm, R);
return;
}
while (1) {
again(perm, L + 1, R);
if (i > L) {
swap(perm[L], perm[i]);
reverse(L + 1, R,perm);
display(perm, R);
i--;
}
else
break;
}
}
void permut(int perm[], int n)
{
int i;
for (i = 0; i <= n; i++)
perm[i] = i