码迷,mamicode.com
首页 > 其他好文 > 详细

[水题+dfs] zoj 3861 Valid Pattern Lock

时间:2015-04-13 12:56:19      阅读:135      评论:0      收藏:0      [点我收藏+]

标签:

题意:

给n个不同的整数(3<=n<=9),问你能绘制出多少种解锁的方案。

输出方案数,以及按字典序输出每种方案。

思路:

一个很水的dfs全排列,加上特判就好了。

特判就是1->9的话就必定经过5等。

这里要注意的是。

中间所经过的数字是必须存在的。

比如要想1->9就必须有5.

5要么被用过,要么就经过5

例子就是 1 3 5 9这四个数。

实际的方案是只有2种

3 5 1 9 和 3 5 9 1

然后就是输入完排下序,保证字典序。

最后就是弱太弱了,写了2个dfs一个算个数,一个输出。

代码:

#include"stdio.h"
#include"algorithm"
#include"string.h"
#include"iostream"
#include"queue"
#include"map"
#include"string"
#define mod 1000000007
using namespace std;
int mp[12][12];
int n,ans,used[123],a[123],b[123];
void f()
{
    mp[1][3]=2;mp[3][1]=2;
    mp[1][7]=4;mp[7][1]=4;
    mp[1][9]=5;mp[9][1]=5;
    mp[2][8]=5;mp[8][2]=5;
    mp[3][7]=5;mp[7][3]=5;
    mp[3][9]=6;mp[9][3]=6;
    mp[4][6]=5;mp[6][4]=5;
    mp[7][9]=8;mp[9][7]=8;
}
void dfs(int cur,int x)
{
    if(x==n)
    {
        ans++;
        return ;
    }
    for(int i=0;i<n;i++)
    {
        if(used[a[i]]==0 && (mp[cur][a[i]]==0 || used[mp[cur][a[i]]]==1))
        {
            used[a[i]]=1;
            dfs(a[i],x+1);
            used[a[i]]=0;
        }
    }
}
void dfs1(int cur,int x)
{
    if(x==n)
    {
        for(int i=0;i<n;i++) printf(i==n-1?"%d\n":"%d ",b[i]);
        return ;
    }
    for(int i=0;i<n;i++)
    {
        if(used[a[i]]==0 && (mp[cur][a[i]]==0 || used[mp[cur][a[i]]]==1))
        {
            used[a[i]]=1;
            b[x]=a[i];
            dfs1(a[i],x+1);
            used[a[i]]=0;
        }
    }
}
int main()
{
    int t;
    cin>>t;
    memset(mp,0,sizeof(mp));
    f();
    while(t--)
    {
        scanf("%d",&n);
        for(int i=0;i<n;i++) scanf("%d",&a[i]);
        sort(a,a+n);
        memset(used,0,sizeof(used));
        ans=0;
        dfs(0,0);
        printf("%d\n",ans);
        memset(used,0,sizeof(used));
        dfs1(0,0);
    }
    return 0;
}


[水题+dfs] zoj 3861 Valid Pattern Lock

标签:

原文地址:http://blog.csdn.net/wdcjdtc/article/details/45023183

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!