• 图形锁可绘制的图案总数计算


    最近看到有人问手机图形解锁一共有多少种图案,便想着写个程序解决。

    所谓图形锁,是指在一个九宫格中,不重复,不跳过(例如132,在2未被访问过的情况下不能直接1->3)的连接4个及以上的点为密码。

    思路:最基本的DFS。用一个二维数组记录访问过的点,每次遍历数组寻找未访问的点作为终点,然后计算起点终点连线的中点是在九宫格上(坐标由整数构成)。如果在九宫格上,则说明跳过了一个点,此时判断该中点是否访问过,如果访问过则合法,未访问过则非法。如果不在九宫格上,则合法。

    代码如下:

    #include<iostream>
    #define M(dfs) do{Map[i][j] = true;dfs;Map[i][j] = false;}while (0);
    
    bool Map[3][3] = {{false}};
    long count = 0;
    void dfs(int x, int y, int floor)
    {
        if (floor >= 4)
            ++count;
        for (size_t i = 0; i < 3; ++i)
            for (size_t j = 0; j < 3; ++j)
                if (Map[i][j] == false)
                    if ((x + i) % 2 != 0 || (y + j) % 2 != 0 || Map[(x + i) / 2][(y + j) / 2] == true)
                        M(dfs(i, j, floor + 1));
    }
    
    int main()
    {
        for (size_t i = 0; i < 3; ++i)
            for (size_t j = 0; j < 3; ++j)
                M(dfs(i, j, 1));
        std::cout << count;
        return 0;
    }
    
    

    结果为389112种。

    另外,该问题还可用排列组合的方法解决。

  • 相关阅读:
    dstat
    centos安装指定版本的golang
    APP防CC为什么复杂
    火狐浏览器的书签如何自动在新窗口打开?
    linux jdk版本随时切换
    centos7 yum安装java环境
    kangle清除缓存接口
    CC攻击原理及防范方法
    GET 和 POST 的区别 以及为什么 GET请求 比 POST请求 更快
    HTTP缓存机制
  • 原文地址:https://www.cnblogs.com/cknightx/p/7459871.html
Copyright © 2020-2023  润新知