POJ 3050 Hopscotch 裸广搜

来源:互联网 发布:12345打字软件下载 编辑:程序博客网 时间:2024/06/05 23:41

题目链接: POJ 3050
题目大意:5*5的方格从里面能取出多少个不同的连续的6位数字组合。
一开始居然打算用hash。。。发现要hash[10^7],最后用的set,还是stl大法好。

/***********************************Problem: 3050       User: ChenyangDuMemory: 1024K       Time: 94MSLanguage: G++       Result: Accepted************************************/#include<iostream>#include<cstdio>#include<cstring>#include<set>using namespace std;const int map[2][4] = {1,0,0,-1,0,1,-1,0};int in[5][5],mod[6];set <int> se;void input(){    for(int i=0;i<5;i++){        for(int j=0;j<5;j++)            scanf("%d",&in[i][j]);    }}void outcome(){    int r = 0;    for(int i=0;i<6;i++){        r *= 10;        r += mod[i];    }    se.insert(r);    return;}void dfs(int x,int y,int s){    if(s == 6){        outcome();        return ;    }    mod[s] = in[x][y];    for(int i=0;i<4;i++){        int a = map[0][i] + x;        int b = map[1][i] + y;        if(a>=0 && a<5 && b>=0 && b<5){            dfs(a,b,s+1);        }    }}int main(){    //freopen("in.txt","r",stdin);    input();    for(int i=0;i<5;i++){        for(int j=0;j<5;j++){            dfs(i,j,0);        }    }    cout<<se.size();    return 0;}
原创粉丝点击