12  21

123 132  213 231 321 312

....

每次都将后面n-1位进行全排列。递归的出口当起始坐标等于终止坐标时。需要还原。

设计标记数组。因为需要从小到大输出。

#define _CRT_SECURE_NO_DEPRECATE
#include<stdio.h>
#include<string.h>
#include<iostream>
#include<string>
#include<algorithm>
using namespace std;
int visited[];
int a[];
void swap(int a[], int i, int j)
{
int temp = a[i];
a[i] = a[j];
a[j] = temp;
} void perm(int a[], int k, int m, int pk, int pm)
{
if (k == m)
{
int sum = ;
for (int i = pk; i <= pm; i++)
{
sum = sum * + a[i];
}
visited[sum] = ;
}
else
{
for (int i = k; i <= m; i++)
{
swap(a, k, i);
perm(a, k + , m, pk, pm);
swap(a, k, i);
}
}
} int main()
{
int t = ;
while (scanf("%d", &a[]) != EOF)
{
scanf("%d%d%d", &a[], &a[], &a[]);
if (a[] == && a[] == && a[] == && a[] == )
break;
if (t != )
printf("\n");
t = ;
sort(a, a + );
memset(visited, , sizeof(visited));
perm(a, , , , );
int k;
int sign = ;
for (int i = ; i < ; i++)
{
if (visited[i]==)
{
sign++;
if (sign== )
{
k = i / ;
printf("%d", i);
}
else
{
if (i / != k)
{
printf("\n");
k = i / ;
}
else
printf(" ");
printf("%d", i);
}
}
}
printf("\n");
}
return ;
}

最新文章

  1. archlinux vmware一些问题
  2. Light OJ 1032 - Fast Bit Calculations(数学)
  3. proteus 运行出错,用户名不可使用中文!
  4. j2ee ehcache
  5. iOS百度地图探索
  6. php7+apache的环境安装配置
  7. TreeMap实现原理
  8. SAML - SSO(转)
  9. bzoj 3626 [LNOI2014]LCA(离线处理+树链剖分,线段树)
  10. NoSql 精粹导读图
  11. js面向对象总结
  12. Python爬虫从入门到放弃(十二)之 Scrapy框架的架构和原理
  13. 文本超过控件长度自动显示省略号的css
  14. Spring Boot 构建电商基础秒杀项目 (一) 项目搭建
  15. thinkphp5 如何使用查询事件?
  16. 【bzoj 1492】[NOI2007]货币兑换Cash
  17. 王者荣耀交流协会 -- 第5次Scrum会议
  18. 在Azure DevOps Server的代理服务器安装Python环境
  19. C++ 开源库列表
  20. flex自定义preloader预加载进度条

热门文章

  1. Wannafly Winter Camp 2020 Day 6H 异或询问 - 二分
  2. linq行转列
  3. 每隔n步循环删除,返回最后一个元素
  4. thinkphp5.0将数据指模板中
  5. AMCL论文及源码解析--参数(持续更新中)
  6. Npoi常用操作方法介绍
  7. 服务起不来,查看ps axj 看服务是否为守护进程(TPGID 为-1)
  8. [Err] 1248 - Every derived table must have its own alias
  9. 线段树(lazy标记)-- 模板
  10. html css二级导航栏