zoukankan      html  css  js  c++  java
  • POJ 3050 (Hopscotch)

    题目链接:http://poj.org/problem?id=3050

    题意:问从5*5的矩阵中选连续的6个(可重复)组成的字符串有多少种

    思路:这也是一道规模不是太大的题目,还是暴力搜索。

       难点在于判断是否有重复,一开始的想法是把字符串练成一个六位数再排序后逐个比较,(其实也可以这样做)但是这样把题目的规模就增大了,所以采用C++ STL中 set 容器。

    ac代码:

    #include <iostream>
    #include <algorithm>
    #include <cstdio>
    #include <set>
    using namespace std;
    int s[6][6];
    int dx[4]={0,0,1,-1},dy[4]={1,-1,0,0};
    set<int> st;
    
    void dfs(int x,int y,int num,int val){
        if(num==6){
            st.insert(val);        //set真的太好用啦,有重复数字的去重效率也很高
            return;
        }
    
        for(int i=0;i<4;i++){
            int nx=x+dx[i];
            int ny=y+dy[i];
            if(nx>=0&&nx<5&&ny>=0&&ny<5){
                num++;
                dfs(nx,ny,num,val*10+s[nx][ny]);
                num--;    //这是一个坑,一开始老是忘记要还原,就邦邦邦的报错
            }
        }
    }
    
    int main(void){
    
        for(int i=0;i<5;i++){
            for(int j=0;j<5;j++){
                scanf("%d",&s[i][j]);
            }
            getchar();
        }
        for(int i=0;i<5;i++)
            for(int j=0;j<5;j++)
                dfs(i,j,1,s[i][j]);
    
        // printf("%d
    ",st.size());
        cout<<st.size()<<endl;
    
        return 0;
    }
    View Code
  • 相关阅读:
    qt运行编译按钮居然是灰色的
    suse linux服务器的常用命令
    windows 防火墙的bug
    烦恼核心
    System.Data.OleDb.OleDbException (0x80004005) 的问题
    c#利用批处理清理大目录
    Spider Studio 社区信息
    示例
    示例
    Spider Studio 新版本 (20140225)
  • 原文地址:https://www.cnblogs.com/jaszzz/p/12548655.html
Copyright © 2011-2022 走看看