POJ - 3050 Hopscotch (DFS)

题目:

http://poj.org/problem?id=3050


题意:

牛在玩一种跳格子游戏,规则如下:

给定 5*5 的格子,每个格子上有对应数字

牛每次可任意选定一个起始位置,向上下左右任一一个方向,跳一个格子,共跳5次,跳过的格子仍然可以继续跳

将每次所跳格子上的数字连起来,组成数字串,求一共有多少种数字串


思路:

这题类似于迷宫类的DFS题,不过一个小区别就是,这题不用visit数组来记录是否访问,因为跳过的格子,仍然可以继续跳

来去重


这题的比较关键之处在于,能不能想到要用DFS来解决该题


代码:

#include 
#include 
using namespace std;
int d[4][2] = {{-1, 0}, {1, 0}, {0, 1}, {0, -1}};
int maze[5][5];
set ans;
void DFS(int x, int y, int step, int num)
{
	if (step == 5)
	{
		ans.insert(num);
		return;
	}
	
	for (int i = 0; i < 4; i++)
	{
		int newx = x + d[i][0],  newy = y + d[i][1];
		if (newx >= 0 && newx < 5 && newy >= 0 && newy < 5)
		{
			DFS(newx, newy, step + 1, num * 10 + maze[newx][newy]);
		}
	}
	
}
int main()
{
	for (int i = 0; i < 5; i++)
	for (int j = 0; j < 5; j++)
	cin >> maze[i][j];
	
	for (int i = 0; i < 5; i++)
	for (int j = 0; j < 5; j++)
	DFS(i, j, 0, maze[i][j]);
	
	cout << (int)ans.size() << endl;
	return 0;
}


你可能感兴趣的:(POJ)