题目链接 : http://acm.hdu.edu.cn/showproblem.php?pid=1716

 
 

排列2

 
Problem Description
Ray又对数字的列产生了兴趣:
现有四张卡片,用这四张卡片能排列出很多不同的4位数,要求按从小到大的顺序输出这些4位数。
 
Input
每组数据占一行,代表四张卡片上的数字(0<=数字<=9),如果四张卡片都是0,则输入结束。
 
Output
对每组卡片按从小到大的顺序输出所有能由这四张卡片组成的4位数,千位数字相同的在同一行,同一行中每个四位数间用空格分隔。
每组输出数据间空一行,最后一组数据后面没有空行。
 
Sample Input
1 2 3 4
1 1 2 3
0 1 2 3
0 0 0 0
 
Sample Output
1234 1243 1324 1342 1423 1432
2134 2143 2314 2341 2413 2431
3124 3142 3214 3241 3412 3421
4123 4132 4213 4231 4312 4321
 
1123 1132 1213 1231 1312 1321
2113 2131 2311
3112 3121 3211
 
1023 1032 1203 1230 1302 1320
2013 2031 2103 2130 2301 2310
3012 3021 3102 3120 3201 3210
 
 
一道全排列的搜索题,思路是先把四个数字从小到大排列,然后把所有可能的四位数全找出来,最后输出的时候把不符合题意的舍去就ok了。
 
 #include <cstdio>
#include <cmath>
#include <cstring>
#include <algorithm>
using namespace std; int a[],vis[],s[];
int t,c; void dfs(int num)
{
if (num == )
{
if (c>=)
s[t++] = c;
return ;
}
for (int i=; i<; i++)
{
if (!vis[i]) //标记访问
{
vis[i] = ;
c = c * + a[i];
dfs(num + );
vis[i] = ;
c = (c - a[i]) / ;
}
}
} int main ()
{
int flag = ;
while (scanf ("%d%d%d%d",&a[],&a[],&a[],&a[]))
{
sort(a, a+);
if (a[] == )
break;
if (flag)
{
printf ("\n");
}
flag = ;
memset(vis, , sizeof(vis));
t = c = ;
dfs();
sort(s, s+t);
int temp;
printf ("%d",s[]);
temp = s[] / ; //记住千位数
for (int i=; i<t; i++)
{
if (s[i] == s[i-]) //因为排序过了,所以相同的四位数都在一起
continue ;
if (s[i] / != temp) //千位数不同,换行
{
printf ("\n%d",s[i]);
temp = s[i] / ; //同时记录新的千位数
}
else
{
printf (" %d",s[i]);
}
}
printf ("\n");
}
return ;
}

今天意外看到一位大神博客,用了一个next_permutation(a.begin(), a.end())函数,轻轻松松实现全排列。

附上大神博客链接和他的代码 : http://www.cnblogs.com/jackge/archive/2013/05/22/3093089.html

 #include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm> using namespace std; int main(){ //freopen("input.txt","r",stdin); int a[],tag=;
while(scanf("%d%d%d%d",&a[],&a[],&a[],&a[])){
if(a[]== && a[]== && a[]== && a[]==)
break;
if(tag)
printf("\n");
tag=;
int flag=,tmp;
do{
if(a[]==)
continue;
if(flag){
printf("%d%d%d%d",a[],a[],a[],a[]);
flag=;
}else if(tmp==a[])
printf(" %d%d%d%d",a[],a[],a[],a[]);
else
printf("\n%d%d%d%d",a[],a[],a[],a[]);
tmp=a[];
}while(next_permutation(a,a+));
printf("\n");
}
return ;
}

hdu 1716(dfs)的更多相关文章

  1. HDU 5143 DFS

    分别给出1,2,3,4   a, b, c,d个 问能否组成数个长度不小于3的等差数列. 首先数量存在大于3的可以直接拿掉,那么可以先判是否都是0或大于3的 然后直接DFS就行了,但是还是要注意先判合 ...

  2. Snacks HDU 5692 dfs序列+线段树

    Snacks HDU 5692 dfs序列+线段树 题意 百度科技园内有n个零食机,零食机之间通过n−1条路相互连通.每个零食机都有一个值v,表示为小度熊提供零食的价值. 由于零食被频繁的消耗和补充, ...

  3. STL训练 HDU - 1716 Ray又对数字的列产生了兴趣:

    HDU - 1716 Ray又对数字的列产生了兴趣: 现有四张卡片,用这四张卡片能排列出很多不同的4位数,要求按从小到大的顺序输出这些4位数. Input 每组数据占一行,代表四张卡片上的数字(0&l ...

  4. hdu 1716 排列2(DFS搜索)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1716 排列2 Time Limit: 1000/1000 MS (Java/Others)    Me ...

  5. hdu 1716 深搜dfs

    #include<stdio.h> #include<stdlib.h> #include<string.h> #define N 5 int f[N]; int ...

  6. hdu 1716 排序2(dfs)

    排列2 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submiss ...

  7. HDU 5877 dfs+ 线段树(或+树状树组)

    1.HDU 5877  Weak Pair 2.总结:有多种做法,这里写了dfs+线段树(或+树状树组),还可用主席树或平衡树,但还不会这两个 3.思路:利用dfs遍历子节点,同时对于每个子节点au, ...

  8. hdu 4751(dfs染色)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4751 思路:构建新图,对于那些两点连双向边的,忽略,然后其余的都连双向边,于是在新图中,连边的点是能不 ...

  9. HDU 1045 (DFS搜索)

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=1045 题目大意:在不是X的地方放O,所有O在没有隔板情况下不能对视(横行和数列),问最多可以放多少个 ...

随机推荐

  1. cocos2d-x 3.1.1 学习笔记[3]Action 动作

    这些动画貌似都非常多的样子,就所有都创建一次. 代码例如以下: /* 动画*/ auto sp = Sprite::create("card_bg_big_26.jpg"); Si ...

  2. 窗口界面编程之一:VB实现简单异形窗口

    一.运行效果图(在Win8里的运行效果,在XP里运行就不能体现出来,因为我使用的XP的界面效果) 二.编译环境:Visual Basic 6.0 (SP6) 三.实现原理:通过区域合并 四.使用API ...

  3. Python基础教程之第2章 列表和元组

    D:\>python Python 2.7.5 (default, May 15 2013, 22:43:36) [MSC v.1500 32 bit (Intel)] on win32 Typ ...

  4. iOS开发——UI篇Swift篇&玩转UItableView(四)自定义&封装

    UItableView自定义&封装 一:Model class AppsModel: NSObject { //定义模型的三个属性 var imageName:String! //图片名称 v ...

  5. MySql之char与varchar

    MySql之char与varchar的差别 char是一种固定长度的类型,varchar则是一种可变长度的类型.它们的差别是:  1. char(M)类型的数据列里.每一个值都占用M个字节.假设某个长 ...

  6. 第十二天--Property List和NSUserDefaults

    转自:http://appleparty.diandian.com/post/2012-05-24/9098104219 Property List  (属性表) 定义:Property List文件 ...

  7. QThread与QWidget使用

    本文主要内容: 在任务一中,用 四 种方式实现:点击界面按钮,开线程运行一段程序,结果显示在一个Label上.1. 用不正确的方式得到看似正确的结果2. 用Qt Manual 和 例子中使用的方法3. ...

  8. JS 公共方法

    1.Format函数 $.GM.Format = function (source, params) { if (arguments.length == 1) return function () { ...

  9. 什么是CSS清除浮动?

    在非IE浏览器(如Firefox)下,当容器的高度为auto,且容器的内容中有浮动(float为left或right)的元素,在这种情况下,容器的高度不能自动伸长以适应内容的高度,使得内容溢出到容器外 ...

  10. 利用map可以对很大的数出现的次数进行记数

    Problem Description In the year 8888, the Earth is ruled by the PPF Empire . As the population growi ...