POJ 2704

 1 #include <iostream>
 2 #include <string>
 3 #define LL long long
 4 #define MAXN 100
 5 using namespace std;
 6 
 7 int dis[2][2] = {1,0,0,1};
 8 
 9 int _m[MAXN][MAXN];
10 LL dp[MAXN][MAXN];
11 struct node
12 {
13     int x;
14     int y;
15 };
16 int n;
17 LL dfs(node _node);
18 //bool mark[MAXN][MAXN];
19 int main()
20 {
21     //freopen("acm.acm","r",stdin);
22 
23     int i;
24     int j;
25     string s;
26     while(cin>>n)
27     {
28         getchar();
29         if(n == -1)
30         {
31             break;
32         }
33         memset(dp,0,sizeof(dp));
34         for(i = 0; i < n; ++ i)
35         {
36             getline(cin,s);
37             for(j = 0; j < n; ++ j)
38             {
39                 //cin>>_m[i][j];
40                 _m[i][j] = s[j]-'0';
41             }
42         }
43     
44         node b;
45         b.x = 0;
46         b.y = 0;
47         cout<<dfs(b)<<endl;
48     }
49 }
50 
51 
52 LL dfs(node _node)
53 {
54     if(_node.x == n-1 && _node.y == n-1)
55     {
56         return 1;
57     }
58     if(_m[_node.x][_node.y] == 0)
59     {
60         return 0;
61     }
62     node temp;
63     temp.x = _node.x+_m[_node.x][_node.y];
64     temp.y = _node.y;
65     if(temp.x < n)
66     {
67         if(dp[temp.x][temp.y] == 0)
68         {
69             dp[_node.x][_node.y] += dfs(temp);
70         }
71         else
72         {
73             dp[_node.x][_node.y] += dp[temp.x][temp.y];
74         }
75     }    
76     temp.x = _node.x;
77     temp.y = _node.y+_m[_node.x][_node.y];
78     if(temp.y < n)
79     {
80         if(dp[temp.x][temp.y] == 0)
81         {
82             dp[_node.x][_node.y] += dfs(temp);
83         }
84         else
85         {
86             dp[_node.x][_node.y] += dp[temp.x][temp.y];
87         }
88     }
89 
90     return dp[_node.x][_node.y];
91 }
原文地址:https://www.cnblogs.com/gavinsp/p/4568645.html