您的位置:首页 > 运维架构

POJ 3050 Hopscotch

2015-10-26 19:21 309 查看
Description

The cows play the child's game of hopscotch in a non-traditional way. Instead of a linear set of numbered boxes into which to hop, the cows create a 5x5 rectilinear grid of digits parallel to the x and y axes. 

They then adroitly hop onto any digit in the grid and hop forward, backward, right, or left (never diagonally) to another digit in the grid. They hop again (same rules) to a digit (potentially a digit already visited). 

With a total of five intra-grid hops, their hops create a six-digit integer (which might have leading zeroes like 000201). 

Determine the count of the number of distinct integers that can be created in this manner.
Input

* Lines 1..5: The grid, five integers per line
Output

* Line 1: The number of distinct integers that can be constructed
Sample Input
1 1 1 1 1
1 1 1 1 1
1 1 1 1 1
1 1 1 2 1
1 1 1 1 1

Sample Output
15

Hint

OUTPUT DETAILS: 

111111, 111112, 111121, 111211, 111212, 112111, 112121, 121111, 121112, 121211, 121212, 211111, 211121, 212111, and 212121 can be constructed. No other values are possible. 

题意:

给定5x5的矩阵。矩阵中的每个点都可以作为起点,每个点可以跳到附近上、下、左、右四个位置。每个位置可以重复跳跃。执行6次操作,可以组合出多少种不同的序列? 

解题思路:

DFS暴搜出所有的结果,把每次搜到的结果变成一个整数存到set容器内,最后输出set元素个数即可。 

#include <iostream>
#include <set>
using namespace std;

int a[6][6];
int dx[4] = {1,0,-1,0},dy[4] = {0,1,0,-1};
set<int> s;

void DFS(int dep,int x,int y,int val)
{
if(dep == 6)
{
s.insert(val);
return;
}

for(int i = 0;i < 4;i++)
{
int nx = x + dx[i],ny = y + dy[i];
if(0 <= nx && nx < 5 && 0 <= ny && ny < 5)
DFS(dep+1,nx,ny,val*10+a[nx][ny]);
}
}

int main(int argc, char const *argv[])
{
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++)
DFS(0,i,j,0);

cout << s.size() << endl;
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  poj 搜索