题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1208
代码如下;
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
int main()
{
int map[38][38];
__int64 dp[38][38];
char str[38];
int n;
while(scanf("%d",&n)!=EOF&&n+1)
{
for(int i=0;i<n;i++)
{
scanf("%s",str); //此处字符串要转换成数字
for(int j=0;j<n;j++)
map[i][j]=str[j]-'0';
}
memset(dp,0,sizeof(dp));
dp[0][0]=1; //初始化为1
for(int i=0;i<n;i++)
for(int j=0;j<n;j++)
{
if(map[i][j]==0||dp[i][j]==0) //次处是数字0时要终止,如果dp[i][j]为0说明此处不能走
continue;
if(i+map[i][j]<n) //不越界
dp[i+map[i][j]][j]+=dp[i][j];
if(j+map[i][j]<n)
dp[i][j+map[i][j]]+=dp[i][j];
}
printf("%I64d\n",dp[n-1][n-1]);
}
return 0;
}