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