zoukankan      html  css  js  c++  java
  • POJ 3050 Hopscotch【DFS带回溯】

    POJ 3050

    题意:

    1.5*5的方阵中,随意挑一格,记住这个格子的数字

    2.可以上下左右走,走5次,每走一次记录下所走格子的数字

    3.经过以上步骤,把所得6个数字连起来,形成一串数字。求共可以形成多少种不同的数字串

    思路:

    网格大小只有5*5,用穷举法,不会超时。

    这里利用了stl中的set容器来防止重复。最终只要输出set的size就是结果。

    注意dfs回溯时的编程规范

    #include<iostream>
    #include<algorithm>
    #include<string.h>
    #include<cstring>
    #include<vector>
    #include<set>
    #include<stack>
    using namespace std;
    
    int a[5][5];
    vector<int> v;
    set<vector<int> >s;
    int dir[][2]={0,1,1,0,0,-1,-1,0};
    
    void dfs(int x,int y,int step)
    {
        if(step==5)
        {
            s.insert(v);
            return;
        }
        for(int i=0;i<4;i++)
        {
            int nx=x+dir[i][0];
            int ny=y+dir[i][1];
            if(nx<0||ny<0||nx>=5||ny>=5)continue;
            v.push_back(a[nx][ny]);
            dfs(nx,ny,step+1);
            v.pop_back();
        }
    
    }
    
    int main()
    {
        for(int i=0;i<5;i++)
            for(int j=0;j<5;j++)
                cin>>a[i][j];
        for(int i=0;i<5;i++)
            for(int j=0;j<5;j++)
            {
                v.clear();
                v.push_back(a[i][j]);
                dfs(i,j,0);
            }
        cout<<s.size();
        return 0;
    }
  • 相关阅读:
    【CF989E】A Trance of Nightfall
    [SHOI2012]信用卡凸包
    [HNOI2016]最小公倍数
    [HNOI2012]射箭
    [SCOI2015]小凸想跑步
    [CQOI2006]凸多边形
    ### Hadoop
    ### awk
    ### Theano
    ### Python Learning
  • 原文地址:https://www.cnblogs.com/demian/p/6554396.html
Copyright © 2011-2022 走看看