- Trending Categories
- Data Structure
- Networking
- RDBMS
- Operating System
- Java
- MS Excel
- iOS
- HTML
- CSS
- Android
- Python
- C Programming
- C++
- C#
- MongoDB
- MySQL
- Javascript
- PHP
- Physics
- Chemistry
- Biology
- Mathematics
- English
- Economics
- Psychology
- Social Studies
- Fashion Studies
- Legal Studies

- Selected Reading
- UPSC IAS Exams Notes
- Developer's Best Practices
- Questions and Answers
- Effective Resume Writing
- HR Interview Questions
- Computer Glossary
- Who is Who

# Program to count number of paths with cost k from start to end point in Python

Suppose we have a 2d binary matrix and another value k. Now starting from the top-left cell, we have to go to the bottom right cell. In one step, we can only go down, or right. Now the score of a path is the sum of the values on the cells on the path. We have to find the number of paths from the start cell to end cell with score k. If there are huge possible ways then return result mod 10^9+7.

So, if the input is like

0 | 0 | 1 |

1 | 0 | 1 |

0 | 1 | 0 |

K = 2, then the output will be 4, as the paths with score 2 are [R,R,D,D], [D,R,R,D], [D,D,R,R], [D,R,D,R] here D is down and R is right.

To solve this, we will follow these steps −

deno := 10^9 + 7

m := row count of matrix, n := column count of matrix

Define a function dfs() . This will take i, j, pts

if i >= m or j >= n, then

return 0

pts := pts + matrix[i, j]

if i is same as m - 1 and j is same as n - 1, then

return 1 when pts is same as k otherwise 0

return dfs(i + 1, j, pts) + dfs(i, j + 1, pts)

From the main method do the following −

return dfs(0, 0, 0) mod deno

## Example

Let us see the following implementation to get better understanding −

class Solution: def solve(self, matrix, k): m, n = len(matrix), len(matrix[0]) def dfs(i=0, j=0, pts=0): if i >= m or j >= n: return 0 pts += matrix[i][j] if i == m - 1 and j == n - 1: return int(pts == k) return dfs(i + 1, j, pts) + dfs(i, j + 1, pts) return dfs() % (10 ** 9 + 7) ob = Solution() matrix = [ [0, 0, 1], [1, 0, 1], [0, 1, 0] ] k = 2 print(ob.solve(matrix, k))

## Input

[ [0, 0, 1], [1, 0, 1], [0, 1, 0] ], 2

## Output

4