原题链接: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 ",ans.size());//世界那么大 我想输出答案 return 0; }