Cho ma trận N x M là A, biểu diễn hình thể 3D. Chiều cao của khối tại vị trí (i, j) là A[i][j]. Ta cần tìm diện tích bề mặt của hình thể.
Ví dụ, với N = 3, M = 3, A = [[1, 4, 5], [3, 3, 4], [1, 3, 5]], kết quả là 72.
Thuật toán giải quyết
res := 0.- Duyệt
itừ 0 đếnN-1,jtừ 0 đếnM-1:up_side := 0,left_side := 0.- Nếu
i > 0:up_side := A[i-1][j]. - Nếu
j > 0:left_side := A[i][j-1]. res += abs(A[i][j] - up_side) + abs(A[i][j] - left_side).- Nếu
i == N-1:res += A[i][j]. - Nếu
j == M-1:res += A[i][j].
res += N * M * 2(mặt trên và dưới).- Trả về
res.
Ví dụ minh họa
M = 3
N = 3
def get_surface_area(array):
res = 0
for i in range(N):
for j in range(M):
up_side = 0
left_side = 0
if i > 0:
up_side = array[i-1][j]
if j > 0:
left_side = array[i][j-1]
res += abs(array[i][j] - up_side) + abs(array[i][j] - left_side)
if i == N - 1:
res += array[i][j]
if j == M - 1:
res += array[i][j]
res += N * M * 2
return res
array = [[1, 4, 5], [3, 3, 4], [1, 3, 5]]
print(get_surface_area(array)) # 72
Đầu vào
[[1, 4, 5], [3, 3, 4], [1, 3, 5]]
Đầu ra
72