鑑於MXN矩陣,其中矩陣元素是「」。要麼 」*」。哪裏。代表道路,*代表街區或牆壁。人可以向前,向下和對角移動,我們需要找到最大的「。」。被人遮住而不被牆擋住。 Example(in image)查找而不塊最大覆蓋元件通過障礙通路
能否請你建議我有效的算法來解決這個問題?
鑑於MXN矩陣,其中矩陣元素是「」。要麼 」*」。哪裏。代表道路,*代表街區或牆壁。人可以向前,向下和對角移動,我們需要找到最大的「。」。被人遮住而不被牆擋住。 Example(in image)查找而不塊最大覆蓋元件通過障礙通路
能否請你建議我有效的算法來解決這個問題?
你必須這樣做:https://en.wikipedia.org/wiki/Flood_fill 拿你能做的最大的洪水。
您是否在尋找確切的路徑或僅病例數?
編輯:這裏它創建了一個隨機矩陣並計算你的「牆」定義每個區域的案件數量smallp Python腳本。
import numpy as np
matrix = np.random.randint(2, size=(10, 10))
print(matrix)
M, N = matrix.shape
walked = []
zonesCount = []
def pathCount(x, y):
if x < 0 or y < 0 or x >= M or y >= N:
return 0
if matrix[x, y] == 1: # I replaced * by 1 and . by 0 for easier generation
return 0
if (x, y) in walked:
return 0
walked.append((x, y))
count = 1
for i in [x - 1, x, x + 1]:
for j in [y - 1, y, y + 1]:
if (i, j) != (x, y):
count += pathCount(i, j)
return count
for x in range(M):
for y in range(N):
if not (x, y) in walked:
zonesCount.append(pathCount(x, y))
print('Max zone count :', max(zonesCount))
這裏是結果:
[[0 0 1 0 0 0 1 0 1 0]
[1 0 1 0 0 0 1 0 1 1]
[0 1 0 0 1 0 0 1 1 1]
[0 0 1 0 0 0 1 1 0 1]
[1 0 1 1 1 1 0 1 1 0]
[1 0 1 1 1 1 0 1 1 0]
[0 0 0 1 1 1 0 0 0 0]
[1 0 0 1 1 0 0 1 1 0]
[0 1 0 1 0 0 1 0 1 1]
[0 1 1 0 0 0 1 0 1 0]]
Max zone count : 50
對不起,我修改了這個問題。我需要找到最大的「。」由人覆蓋。他可以選擇任何路徑。請看看你能夠理解的例子。 – abhi2244
我認爲問題是你可以通過循環獲得無限的路徑。你是否允許用戶多次使用同一個元素? –
用戶可以選擇任何路徑,但他無法通過牆壁。所以可以有多條路徑,但他需要選擇最大覆蓋範圍「。」無需通過任何阻止。 – abhi2244
剛給你一個腳本的例子。 –