1570C旅行(关于路径条数问题)

来源:互联网 发布:iphone拨号软件 编辑:程序博客网 时间:2024/05/17 03:48

题目描述

TomAlice结婚一段时间了,感情非常好,一天他们相约去旅行,终点在遥远的地方。

地形是非常复杂的,路途是非常曲折的。但我们简化一下是一个矩阵。起点也就是他们家在矩阵的左下角,终点也就是他们要去的遥远的地方在右上角,矩阵行列的交点是他们可以驻足的地方,但是有的却是陷阱,他们是不能从那里通过的。Tom要听Alice的,只会往上或往右走,不往回走,直到终点。

       Alice要Tom提前算出从起点到终点一共有多少条路,可Tom不会啊,所以就找到你了,你是编程高手,希望你帮他解决这个问题,不然他们的婚姻就有危机了。

输入

    输入数据的第一行是两个正整数HW(2 < HW < 20),代表矩阵的高和宽。接下来是一个矩阵,共H行,每行W个元素,用空格隔开,元素取值只有010表示可以走,1表示是陷阱,数据保证位于起点和终点的元素肯定是0

输出

    输出一个整数,即从起点到终点的路径数。

示例输入

5 5
1 1 1 1 0
0 0 1 1 0
0 0 0 0 0
1 0 1 0 1
0 0 0 0 0

示例输出

2
  1. #include <stdio.h>  
  2. int main()  
  3. {  
  4.     int a[20][20], i, j, b[20][20], m, n;  
  5.     scanf("%d%d", &m, &n);  
  6.     for(i = 0; i < m; i++)  
  7.     {  
  8.         for(j = 0; j < n; j++)  
  9.             scanf("%d", &a[i][j]);  
  10.     }  
  11.     for(i = m - 2; i >= 0; i--)  
  12.     {  
  13.         if(a[i][0] == 0) b[i][0] = 1;  
  14.         else  
  15.         {  
  16.             for(; i >= 0; i--)  
  17.                 b[i][0] = 0;  
  18.             break;  
  19.         }  
  20.     }  
  21.     for(j = 1; j < n; j++)  
  22.     {  
  23.         if(a[m-1][j] == 0) b[m-1][j] = 1;  
  24.         else  
  25.         {  
  26.             for(; j < n; j++)  
  27.                 b[m-1][j] = 0;  
  28.             break;  
  29.         }  
  30.     }  
  31.     for(i = m - 2; i >= 0; i--)  
  32.     {  
  33.         for(j = 1; j < n; j++)  
  34.         {  
  35.             if(a[i][j] == 1)  
  36.                 b[i][j] = 0;  
  37.             else  
  38.                 b[i][j] = b[i+1][j] + b[i][j-1];  
  39.         }  
  40.     }  
  41.     printf("%d\n", b[0][n-1]);  
  42.     return 0;  
  43.   
  44. }  

原创粉丝点击