zoukankan      html  css  js  c++  java
  • POJ-3050-Hoscotch

    这是一道简单的深搜题目,题意说的是给一个5*5的棋盘,里面填满数字,然后跳到一个格子上,这是第一步,接着向上下左右四个方向任意一个方向走一步,一共走6步,问我们走过的数字组成的一个6位数有多少种不同的方案。
    那这就是一个集合嘛,集合中没有相同的元素,直接输出集合的尺寸就行了。
    我们同样也可以通过打vis标记来做都可以,纯c加O(1)的查询还是快一些。
    这也验证了一件事,格子中的的数字都是个位数。
    这个是可以退出的,当我们所以的点走完之后就自然退出了,因为for循环结束之后,整个dfs就结束了。

    #include <cstdio>
    #include <cstring>
    // #include <set>
    using namespace std;
    // set<int> st;
    int a[6][6], cnt=0;
    int d[4][2] = {{0, 1}, {1, 0}, {0, -1}, {-1, 0}};
    bool vis[1000010];
    
    void dfs(int x,int y,int k,int num)
    {
        if (k==6) {
            // st.insert(num);
            if (!vis[num]) {
                vis[num] = 1;
                cnt++;
            }
            return;
        }
        for (int i = 0; i < 4;i++) {
            int nx = x + d[i][0];
            int ny = y + d[i][1];
            if (nx<5&&ny<5&&nx>=0&&ny>=0) {
                k++;
                dfs(nx, ny, k, num * 10 + a[nx][ny]);
                k--;
            }
        }
    }
    
    int main()
    {
        for (int i = 0; i < 5;i++) {
            for (int j = 0; j < 5;j++) {
                scanf("%d", &a[i][j]);
            }
        }
        memset(vis, 0, sizeof(vis));
        for (int i = 0; i < 5; i++)
        {
            for (int j = 0; j < 5; j++)
            {
                dfs(i, j, 1, a[i][j]);
            }
        }
        printf("%d
    ", cnt);
        // printf("%d
    ", st.size());
        return 0;
    }
    
  • 相关阅读:
    Java文件之NIO核心组件之三选择器
    plsql备份表---只是表---不包含表数据
    根据id来大量删除数据between
    符号的问题
    excel表格中添加单引号的方法
    oracle中insert 多条数据方法
    sql developer以字段来删除大量数据
    Day 29
    Day 28
    Day 27
  • 原文地址:https://www.cnblogs.com/xyqxyq/p/10397198.html
Copyright © 2011-2022 走看看