zoukankan      html  css  js  c++  java
  • 浙江大学2015年校赛B题 ZOJ 3861 Valid Pattern Lock

    这道题目是队友写的,貌似是用暴力枚举出来。

    题意:给出一组数,要求这组数在解锁的界面可能的滑动序列。

    思路:按照是否能够直接到达建图,如1可以直接到2,但是1不能直接到3,因为中间必须经过一个2。

    要注意的假如2已结访问过,那么1就可以直接到2。

    建图DFS,图要更新。

    Source Code:

    #include <stdio.h>
    #include <string.h>
    
    int node[10], ans[10], n, vis[10], k, fun[1000000][10];
    int map[10][10] = {
            {0},
            {0,99,0,2,0,0,0,4,0,5},
            {0,0,99,0,0,0,0,0,5,0},
            {0,2,0,99,0,0,0,5,0,6},
            {0,0,0,0,99,0,5,0,0,0},
            {0,0,0,0,0,99,0,0,0,0},
            {0,0,0,0,5,0,99,0,0,0},
            {0,4,0,5,0,0,0,99,0,8},
            {0,0,5,0,0,0,0,0,99,0},
            {0,5,0,6,0,0,0,8,0,99}
        };
    void dfs( int now, int count ){
        int i;
        if( count == n ){
            for( i=0; i<n; i++ )
                fun[k][i] = ans[i];
            k++;
            return ;
        }
        for( i=1; i<10; i++ ){
            if( map[now][i]!=99 && node[i] ){
                if( !map[now][i] && !vis[i] ){
                    vis[i] = 1;
                    ans[count] = i;
                    dfs(i,count+1);
                    vis[i] = 0;
                }
                else if( map[now][i] && !vis[i] && vis[map[now][i]] ){
                    vis[i] = 1;
                    ans[count] = i;
                    dfs(i,count+1);
                    vis[i] = 0;
                }
            }
        }
    }
    int main(){
        int  t, temp, i, j;
        scanf("%d",&t);
        while( t-- ){
            k = 0;
            memset(node,0,sizeof(node));
            scanf("%d",&n);
            for( i=0; i<n; i++ ){
                scanf("%d",&temp);
                node[temp] = 1;
            }
            for( i=1; i<10; i++ ){
                if( node[i] ){
                    memset(ans,0,sizeof(ans));
                    memset(vis,0,sizeof(vis));
                    ans[0] = i;
                    vis[i] = 1;
                    dfs(i,1);
                }
            }
            printf("%d
    ", k );
            for( i=0; i<k; i++ ){
                for( j=0; j<n-1; j++ )
                    printf("%d ",fun[i][j]);
                printf("%d
    ",fun[i][j]);
            }
        }
        return 0;
    }
  • 相关阅读:
    Windows下 maven3.0.4的安装步骤+maven配置本地仓库
    eclipse+webservice开发实例
    android:layout_gravity和android:gravity属性的差别
    再议指针---------函数回调(qsort函数原理)
    Windows下curl使用
    jquery.validate+jquery.form提交的三种方式
    java final keyword
    URAL 1577. E-mail(简单二维dp)
    【 D3.js 入门系列 --- 7 】 理解 update, enter, exit 的使用
    Code:log4
  • 原文地址:https://www.cnblogs.com/wushuaiyi/p/4423213.html
Copyright © 2011-2022 走看看