`
Simone_chou
  • 浏览: 195874 次
  • 性别: Icon_minigender_2
  • 来自: 广州
社区版块
存档分类
最新评论

Hua Rong Dao(DFS)

    博客分类:
  • FZU
 
阅读更多
Problem 2107 Hua Rong Dao

Accept: 183    Submit: 465
Time Limit: 1000 mSec    Memory Limit : 32768 KB

 

Problem Description

Cao Cao was hunted down by thousands of enemy soldiers when he escaped from Hua Rong Dao. Assuming Hua Rong Dao is a narrow aisle (one N*4 rectangle), while Cao Cao can be regarded as one 2*2 grid. Cross general can be regarded as one 1*2 grid.Vertical general can be regarded as one 2*1 grid. Soldiers can be regarded as one 1*1 grid. Now Hua Rong Dao is full of people, no grid is empty.

 

There is only one Cao Cao. The number of Cross general, vertical general, and soldier is not fixed. How many ways can all the people stand?

Input

There is a single integer T (T≤4) in the first line of the test data indicating that there are T test cases.

Then for each case, only one integer N (1≤N≤4) in a single line indicates the length of Hua Rong Dao.

Output

For each test case, print the number of ways all the people can stand in a single line.

Sample Input

2
1
2

Sample Output

0
18

Hint

Here are 2 possible ways for the Hua Rong Dao 2*4.

      题意:

      给出 T,代表有 T 组数组,后给出 N(1 ~ 4)。代表有 N * 4 个格子,现有 4 种格子块去填充这 N * 4 个格子,而 CaoCao 是必须用的,但是只能用 1 个。问一共有多少种填充方式。

 

      思路:

      DFS。N 最大也只有4,所以不会超时。

 

      AC:

#include <cstdio>
#include <cstring>
#include <algorithm>

using namespace std;

int vis[5][5], sum;
int n, way;

void dfs(int x, int y, int ans) {
        if (ans == sum) {
                ++way;
                return;
        }

        if (vis[x][y]) {
                if (y + 1 <= 4) dfs(x, y + 1, ans);
                else if (x + 1 <= n) dfs(x + 1, 1, ans);
        } else {

                vis[x][y] = 2;
                dfs(1, 1, ans + 1);
                vis[x][y] = 0;

                if (y + 1 <= 4 && !vis[x][y + 1]) {
                        vis[x][y] = vis[x][y + 1] = 3;
                        dfs(1, 1, ans + 2);
                        vis[x][y] = vis[x][y + 1] = 0;
                }

                if (x + 1 <= n && !vis[x + 1][y]) {
                        vis[x][y] = vis[x + 1][y] = 4;
                        dfs(1, 1, ans + 2);
                        vis[x][y] = vis[x + 1][y] = 0;
                }
        }

}

int main() {
        int t;
        scanf("%d", &t);
        while (t--) {

                scanf("%d", &n);

                sum = 4 * n;
                way = 0;

                for (int i = 1; i <= n - 1; ++i) {
                        for (int j = 1; j <= 3; ++j) {
                                memset(vis, 0, sizeof(vis));

                                vis[i][j] = 1;
                                vis[i][j + 1] = 1;
                                vis[i + 1][j] = 1;
                                vis[i + 1][j + 1] = 1;

                                dfs(1, 1, 4);
                        }
                }

                printf("%d\n", way);

        }
        return 0;
}

 

 

 

分享到:
评论

相关推荐

    huarongdao.rar_huarongdao

    当我们深入到“huarongdao.rar_huarongdao”这个压缩包中,我们可以一窥其背后的源码世界,进一步了解设计精巧的算法是如何为这款游戏注入生命力的。 华容道的基本规则是:在一个方格内,玩家需要通过移动各个棋子...

    huarongdao.rar_华容道_华容道游戏

    本文将以“huarongdao.rar”这个压缩包中的“huarongdao.c”源代码文件为例,详细解析华容道游戏的开发过程和关键技术。 首先,我们要理解游戏的基本规则。华容道游戏的目标是通过移动棋盘上的棋子,使得曹操从起始...

    HUARONGDAO_SOL:这是一款名为Huarongdao的解谜游戏中的AI解算器,可在2分钟内解决80个经典难题

    Huarongdao_SOL的核心算法可能采用了搜索策略,如深度优先搜索(DFS)、宽度优先搜索(BFS)或A*搜索算法。这些算法的主要目标是在所有可能的棋盘状态中找到最短的解决方案。其中,A*搜索算法结合了贪婪最佳优先搜索...

    HuaRongDao.rar_华容道 jar 7723

    本文将详细探讨一个名为“HuaRongDao.jar”的Java实现版本,它不仅提供了基本的游戏体验,还具备了后退功能,使得玩家在探索解谜的过程中有了更多尝试的空间。 首先,让我们来了解Java语言在游戏开发中的应用。Java...

    huarongdao.rar_easyX_easyX华容道_hhuarongdao

    在这个名为"huarongdao.rar_easyX_easyX华容道_hhuarongdao"的压缩包中,我们看到的是一个使用EasyX库编写的华容道游戏程序。这个程序不仅是一个娱乐项目,更是一个学习图形编程的绝佳实例。 首先,让我们深入了解...

    huarongdao.zip_三国演义

    【标题】"huarongdao.zip_三国演义" 指的是一个基于经典益智游戏华容道的软件开发项目,与中国的古典文学作品《三国演义》有所关联。这个压缩包包含了一个以Java编程语言编写的华容道游戏的源代码和可执行程序。 在...

    huarongdao.rar_华容道

    此压缩包“huarongdao.rar”中包含的“华容道算法.txt”文件,是对华容道游戏的一种编程实现的源代码。 首先,我们来分析华容道的基本规则:棋盘上有一块代表曹操的大块,周围有若干小块代表不同的武将,目标是通过...

    huarongdao.zip_华容道

    常见的选择有深度优先搜索(DFS)或广度优先搜索(BFS)。这些算法会遍历所有可能的移动序列,直到找到解决方案。在BFS中,可以使用队列来存储当前状态;在DFS中,可以使用递归或栈来实现。 ```cpp bool solveDFS...

    HuaRongDao.rar_gcj_华容道

    5. **回溯策略**:在DFS中,当搜索到非目标状态且无更多可移动棋子时,回溯至上一步,尝试其他路径。 6. **动态规划**:在某些情况下,可以利用动态规划优化搜索过程,通过记忆化搜索减少重复计算。 四、复杂性...

    huarongdao.zip_matlab_

    3. 解法搜索:可以采用深度优先搜索(DFS)或广度优先搜索(BFS)策略,结合回溯算法来寻找可能的解决方案。每次尝试移动一个棋子,如果达到目标状态,则找到一个解;否则,回溯到上一步,尝试其他可能的移动。 4. 步数...

    Hua_Rong_Dao.rar_华容道游戏

    此外,解决华容道问题可能需要用到回溯算法、深度优先搜索(DFS)或者A*搜索算法等,这些算法可以帮助找到解谜的路径。 4. **游戏逻辑**:这部分代码实现游戏规则,包括棋子的合法移动、检查游戏是否结束以及记录...

    华容道游戏求解最少步骤

    在描述中提到的`com.butnet.game.huarongdao.Main`是这个项目的主要入口,它应该是整个程序的控制中心,负责启动和协调整个求解过程。这个主程序可能会调用各种算法,如深度优先搜索(DFS)、广度优先搜索(BFS)...

Global site tag (gtag.js) - Google Analytics