HDU1208 Pascal's Travels

题意:根据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;
}


你可能感兴趣的:(HDU1208 Pascal's Travels)