博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
hdu1716 排列2
阅读量:5138 次
发布时间:2019-06-13

本文共 1834 字,大约阅读时间需要 6 分钟。

12  21

123 132  213 231 321 312

....

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

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

#define _CRT_SECURE_NO_DEPRECATE#include
#include
#include
#include
#include
using namespace std;int visited[10010];int a[4];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 = 0; for (int i = pk; i <= pm; i++) { sum = sum * 10 + a[i]; } visited[sum] = 1; } else { for (int i = k; i <= m; i++) { swap(a, k, i); perm(a, k + 1, m, pk, pm); swap(a, k, i); } }}int main(){ int t = 0; while (scanf("%d", &a[0]) != EOF) { scanf("%d%d%d", &a[1], &a[2], &a[3]); if (a[1] == 0 && a[2] == 0 && a[0] == 0 && a[3] == 0) break; if (t != 0) printf("\n"); t = 1; sort(a, a + 4); memset(visited, 0, sizeof(visited)); perm(a, 0, 3, 0, 3); int k; int sign = 0; for (int i = 1000; i < 10000; i++) { if (visited[i]==1) { sign++; if (sign== 1) { k = i / 1000; printf("%d", i); } else { if (i / 1000 != k) { printf("\n"); k = i / 1000; } else printf(" "); printf("%d", i); } } } printf("\n"); } return 0;}

 

转载于:https://www.cnblogs.com/Hu-Mx/p/6479934.html

你可能感兴趣的文章
第二次团队冲刺--2
查看>>
Linux上架设boost的安装及配置过程
查看>>
[转载]加密算法库Crypto——nodejs中间件系列
查看>>
使用Xshell密钥认证机制远程登录Linux
查看>>
【模板】最小生成树
查看>>
网络编程
查看>>
java面试题
查看>>
pair的例子
查看>>
uva 387 A Puzzling Problem (回溯)
查看>>
12.2日常
查看>>
Oracle中包的创建
查看>>
django高级应用(分页功能)
查看>>
【转】Linux之printf命令
查看>>
关于PHP会话:session和cookie
查看>>
display:none和visiblity:hidden区别
查看>>
C#double转化成字符串 保留小数位数, 不以科学计数法的形式出现。
查看>>
3月29日AM
查看>>
利用IP地址查询接口来查询IP归属地
查看>>
HTML元素定义 ID,Class,Style的优先级
查看>>
构造者模式
查看>>