假設有500個人口,每個人都知道他們是誰。
假設有一個500人的人口,每個人都知道 恰好認識人口中的其他4個人。假設一個人被 感染了一種疾病,而且這種疾病保證會在1天內感染這個人認識的其他4個人。
假設一個人感染了某種疾病,而這種疾病保證會在1天的時間內感染該人認識的其他4個人。寫一個演算法來確定每個人需要多少天時間 感染的時間。
寫一個演算法,以確定在輸入鄰接矩陣的情況下,每個人需要多少天才能被感染。
我搞不清楚如何正確地跟蹤天數。我嘗試了以下方法,但它只是給了我一個接近于節點總數的數字(它應該更低):
import random
random.seed(20)
nodes = 500
num_connections=4
#生成隨機圖。
圖 = []
for node_num in range(nodes)。
myrow = [0 for 節點 in range(nodes - num_connections)] [1 for connection in range(num_connections)]
random.shuffle(myrow)
graph.append(myrow)
天 = 0
visited = [0]
佇列 = [0]
while queue:
ss = queue.pop(0)
for neighbor, is_connected in enumerate(graph[ss])。
if is_connected == 1 and neighbor not in visited。
visited.append(neigher)
queue.append(neigher)
days = 1 1
print( days)
我做錯了什么?
uj5u.com熱心網友回復:
- 找到最長的短的
- 找到從第一個被感染的人到其他任何人的最長最短路徑。 使用Dijkstra演算法。
- 該路徑的長度是指 天數。
uj5u.com熱心網友回復:
你的問題相當于尋找圖中最長的最短路線。但如果你想修復你目前的代碼,我為你修復了它:)
import random
random.seed(20)
nodes = 50
num_connections=4
#生成隨機圖。
圖 = []
for node_num in range(nodes)。
myrow = [0 for 節點 in range(nodes - num_connections)] [1 for connection in range(num_connections)]
random.shuffle(myrow)
graph.append(myrow)
天 = 0
visited = [0]
佇列 = [0]
while len( visited) < nodes:
患者 = queue.copy()
queue.clear()
days = 1; nodes: patients = queue.copy()
while len(pants) > 0:
ss = patients.pop(0)
for neighbor, is_connected in enumerate(graph[ss])。
if is_connected == 1 and neighbor not in visited。
visited.append(neigher)
queue.append(neigher)
if len(queue) == 0:
print(f'The given directional graph is not connected, after {days} days, {len(visited)}人已經被感染了')
退出()
print( days)
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/308815.html
標籤:
上一篇:用XOR法求出一個陣列的子數。
下一篇:演算法問題。最大的連續子陣列選擇
