• 浙江大学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;
    }
  • 相关阅读:
    PHP通用函数
    Discuz 取各排行榜数据
    htaccess 增加静态文件缓存和压缩
    一个域名解析不同访问方法
    TP5:隐藏inde.php文件
    vscode:解决操作git总让输入用户名及密码问题
    vscode:配置git
    cmd:相关命令和笔记
    PHP:通过MVC,实现第三方登录(百度)
    Linux:301重定向 —— 将不带www的重定向到带www的
  • 原文地址:https://www.cnblogs.com/wushuaiyi/p/4423213.html
Copyright © 2020-2023  润新知