Example: matrix[3][4]
Given an n x n matrix and a number x, find the position of x in the matrix if it is present in it. Otherwise, print “Not Found”.
In the given matrix, every row and column is sorted in increasing order.
The algorithm should have linear time complexity.
def search_row_column_wise_sorted_matrix(matrix, key):
n = len(matrix)
# Start with top right corner
i = 0; j = n - 1
while i < n and j >= 0:
# If righmost element is lesser than key, skip that row
if matrix[i][j] < key:
i += 1
# Else if righmost element is greater than key, skip that column
elif matrix[i][j] > key:
j -= 1
# Else if righmost element is equal to key, the key is found.
else:
print("Key {}: Found at ({}, {})".format(key, i, j))
return
print("Key {}: Not Found".format(key))
mat = [ [10, 20, 30, 40],
[15, 25, 35, 45],
[27, 29, 37, 48],
[32, 33, 39, 50] ]
print("Example-1: search_row_column_wise_sorted_matrix(matrix, key)")
search_row_column_wise_sorted_matrix(mat, 29)
print("\nExample-2: search_row_column_wise_sorted_matrix(matrix, key)")
search_row_column_wise_sorted_matrix(mat, 38)
Output:
Print a matrix in spiral form.
Example:
def matrix_spiral_print(matrix):
## Some Important Variables
# • row_start - starting row index
# • row_end - ending row index
# • col_start - starting column index
# • col_end - ending column index
# • i - iterator
row_start = 0; row_end = len(matrix)
col_start = 0; col_end = len(matrix[0])
while (row_start<row_end and col_start<col_end) :
# Print the first row, after printing done increment the row_start
for i in range(col_start, col_end) :
print(matrix[row_start][i], end = " ")
row_start += 1
# Print the last column, after printing done decrement the col_end
for i in range(row_start, row_end) :
print(matrix[i][col_end-1], end = " ")
col_end -= 1
# Print the last row, after printing done decrement the row_end
if row_start < row_end:
for i in range(col_end - 1, (col_start - 1), -1) :
print(matrix[row_end - 1][i], end = " ")
row_end -= 1
# Print the first column, after printing done increment the col_start
if (col_start < col_end) :
for i in range(row_end - 1, row_start - 1, -1) :
print(matrix[i][col_start], end = " ")
col_start += 1
print()
print("Example-1: matrix_spiral_print(matrix)")
mat = [ [ 1, 2, 3, 4],
[ 5, 6, 7, 8],
[ 9, 10, 11, 12],
[13, 14, 15, 16] ]
matrix_spiral_print(mat)
Output:
In MS-Paint, when we take the brush to a pixel and click, the color of the region of that pixel is replaced with a new selected color. Following is the problem statement to do this task. Given a 2D screen, location of a pixel in the screen and a color, replace color of the given pixel and all adjacent same colored pixels with the given color.
Example:
flood_fill(screen[M][N], x, y, prev_color, new_color)
screen[x][y]
is not same as prev_color, then returndef flood_fill(screen, x, y, prev_color, new_color):
m = len(screen)
n = len(screen[0])
# If x or y is outside the screen, then return.
if(x < 0 or x >= m or y < 0 or y >= n):
return
# If color of screen[x][y] is not same as prev_color, then return
if(screen[x][y] != prev_color):
return
# Replace the color at (x, y)
screen[x][y] = new_color
# Recur for north, south, east and west
flood_fill(screen, x, y+1, prev_color, new_color)
flood_fill(screen, x, y-1, prev_color, new_color)
flood_fill(screen, x+1, y, prev_color, new_color)
flood_fill(screen, x-1, y, prev_color, new_color)
print("Example-1: Flood Fill Algorithm")
screen = [ [1, 1, 1, 1, 1, 1, 1, 1],
[1, 1, 1, 1, 1, 1, 0, 0],
[1, 0, 0, 1, 1, 0, 1, 1],
[1, 2, 2, 2, 2, 0, 1, 0],
[1, 1, 1, 2, 2, 0, 1, 0],
[1, 1, 1, 2, 2, 2, 2, 0],
[1, 1, 1, 1, 1, 2, 1, 1],
[1, 1, 1, 1, 1, 2, 2, 1] ]
flood_fill(screen, 4, 4, 2, 3);
m = len(screen)
n = len(screen[0])
for i in range(m):
for j in range(n):
print(screen[i][j], end=" ")
print()
Output:
← Previous: Queue Next: Binary Tree →