题意:根据n*n的数据从左上角走到右下角,问有多少种走法。。。。。
dfs............
#include<cstdio>
#include<stdlib.h>
#include<string.h>
#include<string>
#include<map>
#include<cmath>
#include<iostream>
#include <queue>
#include <stack>
#include<algorithm>
#include<set>
using namespace std;
#define inf 2147483647
#define eps 1e-8
#define LL long long
#define M 50005
#define mol 1000000007
int mat[50][50];
__int64 ans[50][50];
int n;
int pd(int x,int y)
{
if(x>=0&&x<n&&y>=0&&y<n)
return 1;
return 0;
}
__int64 dfs(int x,int y)
{
if(!mat[x][y])
return 0;
if(ans[x][y])
return ans[x][y];
if(pd(x+mat[x][y],y))
ans[x][y]+=dfs(x+mat[x][y],y);
if(pd(x,y+mat[x][y]))
ans[x][y]+=dfs(x,mat[x][y]+y);
return ans[x][y];
}
int main()
{
while(scanf("%d",&n)&&n!=-1)
{
int i,j;
char s[50];
getchar();
memset(mat,0,sizeof(mat));
memset(ans,0,sizeof(ans));
for(i=0;i<n;i++)
{
scanf("%s",s);
for(j=0;j<n;j++)
{
mat[i][j]=s[j]-'0';
}
}
mat[n-1][n-1]=1;
ans[n-1][n-1]=1;
printf("%I64d\n",dfs(0,0));
}
return 0;
}