【4858.com】排列组合

By admin in 4858.com on 2019年6月29日
for (i = 1; i <= N; i++)
  num[i] = i;
perm(num, 1);
return 0;
}

void perm(int *num, int i)
{
  int j, k, tmp;
  if (i < N)
  {
    for (j = i; j <= N; j++)
    {
      tmp = num[j];
      // 旋转该区段最右边数字至最左边
      for (k = j; k > i; k--)
        num[k] = num[k - 1];
      num[i] = tmp;
      perm(num, i + 1);
      // 还原
      for (k = i; k < j; k++)
        num[k] = num[k + 1];
      num[j] = tmp;
    }
  }
  else
  {
    // 显示此次排列
    for (j = 1; j <= N; j++)
      printf("%d ", num[j]);
    printf("\n");
  }
}

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图
Copyright @ 2010-2019 美高梅手机版4858 版权所有