Chinaunix首页 | 论坛 | 博客
  • 博客访问: 198182
  • 博文数量: 67
  • 博客积分: 2970
  • 博客等级: 少校
  • 技术积分: 685
  • 用 户 组: 普通用户
  • 注册时间: 2010-07-23 11:36
文章分类

全部博文(67)

文章存档

2012年(2)

2011年(19)

2010年(46)

我的朋友

分类: C/C++

2010-07-25 09:27:39

#include<stdio.h>
#include<string.h>

const int N=13;
int n;
int base[N],map[N];
bool visit[N];

void dfs(int depth)
{
    if(depth==6)
    {
        for(int i=0;i<6;i++)
        {
            if(i) printf(" ");
            printf("%d",map[i]);
        }
        printf("\n");
        return;
    }

    for(int i=0;i<n;i++)
    {
        if(!visit[i]&&(depth==0||base[i]>map[depth-1]))
        {
            visit[i]=1;
            map[depth]=base[i];
            dfs(depth+1);
            visit[i]=0;
        }
    }
}

int main()
{
    bool first=true;
    while(scanf("%d",&n),n)
    {
        if(first) first=false;else printf("\n");

        for(int i=0;i<n;i++)
            scanf("%d",&base[i]);
        
        memset(visit,0,sizeof(visit));
        dfs(0);
    }
}


从流程可以看出,所谓的深度优先搜索,也就是在一个序列上从前向后依次枚举各个位置

阅读(902) | 评论(0) | 转发(0) |
0

上一篇:pku1088 滑雪

下一篇:hdu1242 Rescue

给主人留下些什么吧!~~