#include <stdio.h>
#define MAXN 5000
#define Nr 100
int used[MAXN]; /* 待排列数据使用标记 */
int p[MAXN]; /* 解空间 - 保存每次形成的排列结果 */
int data[MAXN]; /* 待排列组合的数据空间 */
int B[MAXN][Nr];
int Result_Matrix[MAXN][Nr]; /*得到的排列结果用二维矩阵表示*/
int count=0;
int sum=0;
void permute(int pos, int r, int n)
{
for (int j=0; j<n; j++)
{
data[j]=j;
}
int i = 0;
if (pos != r)
{
for (i=0; i<n; i++)
{
if (!used[i])
{
used[i]++;
p[pos] =data[i];
permute(pos+1,r,n);
used[i]--;
}
}
}
else
{
for (i=0;i<r;i++)
Result_Matrix[count][i]=p[i];
if (Result_Matrix[count][0]==0)
sum=count+1;
count++;
}
return;
}
void shift(int a[][],int r,int s)
{
int i,j;
for(i=0;i<sum;i++)
{
for(j=0;j<r;j++)
{
a[i][j-1]=a[i][j];
a[i][r-1]++;
}
}
}
void main()
{
int i,j;
int m;
int r;
int s;
printf("input int m=");
scanf("%d",&m);
printf("input int r=");
scanf("%d",&r);
if(m%2==0&&r%2==0)
permute(0,r,m); //运行之后需要的全排列二维矩阵被存到了全局变量Result_Matrix中.
//最后count的值是全排列矩阵的行数,Nr的值是全排列矩阵的列数。
shift( Result_Matrix[i][j], r, 1);
for (i=0;i<sum;i++)
{
for (j=0;j<r;j++)
printf("%d, ",Result_Matrix[i][j]);
printf("\n");
}
printf(" sum=%d\n ",sum);
printf("count=%d\n ",count);
printf("The end!\n\n");
}
提示有两出错误 不知道怎么修改
郁闷!
整个程序的功能是 先在长为m的序列中求长度为n的全排列 然后进行循环左移 并且移位后最后一位要加一,然后与移位前的序列对比 用count记数 如果对比结果不相同 count++ 输出结果
[此贴子已经被作者于2006-5-12 17:45:09编辑过]