POJ3050 -- Hopscotch 简单的dfs搜索

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

(一些文字过会儿再说现在有事儿)

#include <cstdio>
#include <set>
using namespace std;
int a[7][7],dx[]={317,0,0,1,-1},dy[]={318,1,-1,0,0};//4个方向
set<int>ans;//答案
void dfs(int x,int y,int d,int n)//x和y是坐标。d是深度,也就是长度。n是那个搜出来的数 
{
	if(d==6){ans.insert(n);return;}
	int nx,ny;//新的
	for(int i=1;i<=4;i++)//4个方向
	{
		nx=x+dx[i];//计算
		ny=y+dy[i];//计算
		if(nx>=1&&nx<=5&&ny>=1&&ny<=5)//没出边界
		{
			dfs(nx,ny,d+1,n*10+a[nx][ny]);//继续搜
		}
	}
}
int main()
{
	for(int i=1;i<=5;i++)
		for(int j=1;j<=5;j++)
			scanf("%d",&a[i][j]);//输入
	for(int i=1;i<=5;i++)
		for(int j=1;j<=5;j++)
			dfs(i,j,1,a[i][j]);//深搜
	printf("%d\n",ans.size());//世界那么大 我想输出答案
	return 0;
}

 

posted @ 2016-06-05 21:58  ghj1222  阅读(169)  评论(0编辑  收藏  举报