我有一個連接時,定向的,環狀的曲線圖。任務是發現圖中的每個單個節點,而不會陷入無限循環,因爲常規的樹遍歷算法會執行此操作。算法有向循環圖遍歷(JavaScript的)
你可以假設我已經知道,以便在向圖到達所有點開始什麼節點,而每個節點我有將回到它引導到節點的功能。有找到所有節點的已知算法嗎?
主要問題是真的,避免循環,我會喜歡它,如果有辦法做到這一點不保持每一個節點的軌跡,並將其與已經被經過的各個節點的列表進行比較。
如果您需要更多的細節,實際的任務是讓JavaScript中每個命名功能列表,包括其他對象的屬性功能。所以,我想類似下面的,因爲我認爲JS對象的引用對方做了一個樹(當然事實並非如此):
function __findFunctions(obj){
for (var f in obj){
// for special case of edge with self
if (obj === obj[f]){
continue
}
if (typeof obj[f] === 'function' &&
obj.hasOwnProperty(f) &&
// exclude native functions, we only want user-defined ones
!(/\[(native\scode|object\sfunction)\]/i).test(obj[f].toString()) &&
// exclude functions with __ prefix
!(/^\s*function\s*__/).test(obj[f].toString())
){
document.write(f + "<br/>" + obj[f].toString() + "<hr/>");
}
//alert(typeof obj[f] + "\n" + obj + "\n" + obj[f] + "\n" + f)
__findFunctions(obj[f]);
}
}
__findFunctions(window);
這段代碼的問題是,它陷在週期。
請忽略正則表達式,在這個問題的背景下不是太重要。儘管我很想知道是否有更好的方式來告訴用戶定義的功能,而不是本地功能。 – ehsanul 2010-07-08 07:24:12