原题链接: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;
}