Tôi đã viết một số mã để xác định các thành phần được kết nối trong ảnh nhị phân. Tôi đã sử dụng tìm kiếm độ sâu đệ quy đầu tiên. Tuy nhiên, đối với một số hình ảnh, Giới hạn đệ quy Python là không đủ. Ngay cả khi tôi tăng giới hạn lên mức tối đa được hỗ trợ trên máy tính, chương trình vẫn bị lỗi đối với một số hình ảnh. Làm cách nào để triển khai DFS lặp đi lặp lại? Hoặc có giải pháp nào khác tốt hơn?
Mã của tôi:
đếm=1
chiều cao=4
chiều rộng = 5
g = np.zeros((chiều cao+2, chiều rộng+2))
w = np.zeros((chiều cao+2, chiều rộng+2))
dx = [-1,0,1,1,1,0,-1,-1]
dy = [1,1,1,0,-1,-1,-1,0]
def dfs(x,y,c):
toàn cầu w
w[x][y]=c
cho tôi trong phạm vi (8):
nx = x+dx[i]
ny = y+dy[i]
nếu g[nx][ny] chứ không phải w[nx][ny]:
dfs(nx,ny,c)
def find_connected_comComponents(hình ảnh):
số lượng toàn cầu, g
g[1:-1,1:-1]=hình ảnh
cho tôi trong phạm vi (1, chiều cao + 1):
cho j trong phạm vi (1, chiều rộng + 1):
nếu g[i][j] chứ không phải w[i][j]:
dfs(i,j,count)
đếm+=1
Mask1 = np.array([[0,0,0,0,1],[0,1,1,0,1],[0,0,1,0,0],[1,0,0, 0,1]])
find_connected_comComponents(mask1)
mặt nạ in1
in w[1:-1,1:-1]
Đầu vào và đầu ra:
[[0 0 0 0 1]
[0 1 1 0 1]
[0 0 1 0 0]
[1 0 0 0 1]]
[[ 0. 0. 0. 0. 1.]
[0. 2. 2. 0. 1.]
[0. 0. 2. 0. 0.]
[3. 0. 0. 0. 4.]]
- Lập danh sách các địa điểm tham quan
- Sử dụng vòng lặp while để truy cập từng vị trí, bật vị trí đó ra khỏi danh sách.
Như thế này:
def dfs(x,y,c):
toàn cầu w
locs = [(x,y,c)]
trong khi địa phương:
x,y,c = locs.pop()
w[x][y]=c
cho tôi trong phạm vi (8):
nx = x+dx[i]
ny = y+dy[i]
nếu g[nx][ny] chứ không phải w[nx][ny]:
locs.append((nx, ny, c))
Tôi là một lập trình viên xuất sắc, rất giỏi!