【poj 3050】 Hopscotch

来源:互联网 发布:淘宝专门领券的网站 编辑:程序博客网 时间:2024/06/05 18:28

题意:

给定一个5×5的方格,每个方格内有一个09之间的数,现在让你任意起点,向上下左右四个方向随便跳6次,求每次跳过的格子里的数字连起来形成的数一共有几个。每个格子可以跳无限次。数字可以不是6位数,意味着前面有0也是可以的。

思路:

深度优先搜索,枚举从每一个点开始跳6步的情况,每次跳到6步,就用map判断一下是否重复,不重复就把计数器++。

代码:

#include <iostream>#include <cstdio>#include <map>using namespace std;int a1[10][10], cnt;map <int, bool> map1;int b1[5] = {0,1,-1,0,0};int b2[5] = {0,0,0,-1,1};void dfs(int x, int y, int now, int step){    if(step == 6){        if(!map1[now]) map1[now] = 1, cnt ++;        return;    }    for(int i = 1; i <= 4; i ++){        int x1 = x+b1[i], y1 = y+b2[i];        if(x1<=5&&y1<=5&&x1>=1&&y1>=1){            dfs(x1, y1, now*10+a1[x1][y1], step+1);        }    }}int main(){    for(int i = 1; i <= 5; i ++)        for(int j = 1; j <= 5; j ++)            scanf("%d", &a1[i][j]);    for(int i = 1; i <= 5; i ++)        for(int j = 1; j <= 5; j ++)            dfs(i, j, a1[i][j], 1);    printf("%d", cnt);    return 0;}
0 0
原创粉丝点击