
Data Structure
Networking
RDBMS
Operating System
Java
MS Excel
iOS
HTML
CSS
Android
Python
C Programming
C++
C#
MongoDB
MySQL
Javascript
PHP
- Selected Reading
- UPSC IAS Exams Notes
- Developer's Best Practices
- Questions and Answers
- Effective Resume Writing
- HR Interview Questions
- Computer Glossary
- Who is Who
Find Number of Accepted Invitations in Python
Suppose there are m boys and n girls, and m = n. There is a party incoming, and each boy has to go with a girl to that party. So, the boys invite all the girls and a girl can accept one invitation only. We have to find out the total number of invitations from the boys that the girls can accept. The input is given in a m x n matrix, where each cell position i, j denotes if the boy i has sent a letter to girl j. If a cell is 1 it means that an invitation has been sent, if it is 0 it means no invitation is sent.
So, if the input is like
1 | 0 | 0 |
1 | 0 | 1 |
1 | 1 | 0 |
then the output will be 3.
The output will be 3 if −
Girl 1 accepts boy 1's invitation.
Girl 2 accepts boy 3's invitation.
Girl 3 accepts boy 2's invitation.
(here index starts at 1)
To solve this, we will follow these steps −
- Define a function dfs() . This will take node, seen
- for nei in range 0 to N, do
- if grid[node][nei] is non-zero and seen[nei] is False, then
- seen[nei] := True
- if matching[nei] is same as -1 or dfs(matching[nei], seen) is True, then
- matching[nei] := node
- return True
- if grid[node][nei] is non-zero and seen[nei] is False, then
- return False
- for nei in range 0 to N, do
- M:= row count of grid
- N := column count of grid
- matching := a list of size N containing value -1
- res := 0
- for i in range 0 to M, do
- seen := a list of size N containing value False
- if dfs(i, seen) is True, then
- return res
- return res
Example
Let us see the following implementation to get better understanding −
def solve(grid): M, N = len(grid), len(grid[0]) matching = [-1] * N def dfs(node, seen): for nei in range(N): if grid[node][nei] and not seen[nei]: seen[nei] = True if matching[nei] == -1 or dfs(matching[nei], seen): matching[nei] = node return True return False res = 0 for i in range(M): seen = [False] * N if dfs(i, seen): res += 1 return res print(solve([[1, 0, 0], [1, 0, 1], [1, 1, 0]]))
Input
[[1, 0, 0], [1, 0, 1], [1, 1, 0]]
Output
3