1
如果我們具有與邊連接(如使用街道的交叉)的節點的數量,並且每個節點具有0至3的邊緣的值具有值0。算法匹配一個圖形
現在我想寫一個算法,該算法將節點的值分配給值邊緣,因此在算法終止後,所有節點的值都爲0,並且所有邊的值爲< = 1.
例如,給定此圖:
我想製作此圖:
。
我的解決方案:
我所定義的數據類型隧道和街道:
public class Crossing{
int value;
}
public class Street{
int value;
Crossing A, B;
}
通過交叉算法遍歷和分配的值,以街道(請注意,交叉只能分配其價值到相鄰的街道)。
void allocate(Crossing[] crossings, Street[] streets){
foreach(crossings as c){ //iterate through every Crossing
foreach(streets as s){ //Find the streets, which are adjacent to c
if((s.A == c || s.B == c) && s.value < 1 && c.value != 0)
// The value of the crossing is >0 and the value of the
// street is 0.
c.value -= 1;
s.value += 1;
}
}
}
我的算法能工作嗎?如果是:是否有效,還是有更好的解決方案?
感謝您對最大流量的建議。所以我的邊緣有容量1,但是我如何定義我的源和目標?我會說所有的交叉點(節點)都是來源。這是真的嗎? – user1937182
儘管我仍然不明白你的問題的規律是什麼(當它將節點移動到邊緣的限制?)。關於這種情況,您可以創建另外2個虛擬節點作爲源和目標,將它們連接到所有具有虛擬邊緣的原始節點 – shole