2010-04-27 124 views
0

QuickGraph能夠幫助我滿足下面的要求嗎? (a)想要建模一個節點和節點之間的方向關係圖 - 例如模擬鏈接到URL下的網頁/文件,或建模IT基礎架構和硬件/軟件之間的依賴關係。該庫將包括諸如可以QuickGraph支持這些要求嗎? (包括數據庫持久性支持)

* Node.GetDirectParents() //i.e. there could be more than one direct parent for a node 
* Node.GetRootParents() //i.e. traverse the tree to the top root parent(s) for the given node 
* Node.GetDirectChildren() 
* Node.GetAllChildren() 

(b)可將數據保存到數據庫 - 所以應該支持SQL Server和理想的SQLite以及。

如果它不支持這些要求的話,我很樂意聽到:

  1. 任何指針 QuickGraph的任何部分鑽進去?

  2. 什麼是重新它最好的概念是在如何使用 數據庫持久性方面 使用 - 它是一個 簡單的設計假設每 搜索/方法的工作直接在 數據庫,或不QuickGraph支持 智慧能在內存 工作和「保存」到數據庫在適當的點都 變化 時間(例如像ADO.net確實與 數據表等)

在此先感謝

回答

1

Greg,

a。是的,Quickgraph可以很容易地以這種方式搜索節點。我已在您的other question中提供了一個示例。

b。據我所知,SQL序列化不是「內置」QuickGraph的;你必須建立你自己的定製實現。由於大多數圖表不僅僅是一個簡單的頂點和節點列表,在QuickGraph中自動(本地)實現這一點相當困難,但實現起來相當簡單。

  1. 你可以看看QuickGraph源代碼中的GraphML序列化部分。這可能會給你一些提示開始。
  2. QuickGraph在內存中工作,它不起作用「抵制」持久性存儲,並且不適用於(因爲持久性存儲通常非常慢)。所以,你需要手動保存信息。但是,您可以監視不同的QuickGraph事件,例如VertexAdded,VertexRemoved,EdgeAdded和EdgeRemoved,以確定圖形何時更改,然後在這些時間執行序列化。

-Doug

+0

謝謝回答道格 - 我仍然試圖跨越代碼即可獲得 - 這是一種複雜的代碼是不是,指出有隨處可見的事件和使用泛型等 – Greg 2010-05-07 11:26:00

+0

的是的,QuickGraph並不是一件容易的事情,只是拿起並弄清楚,特別是如果你不是很熟悉圖論,並且具有關於你如何通常使用圖表的實踐知識(例如深度優先搜索,寬度優先搜索,拓撲排序,可以和不能用循環圖表做什麼等)。如果你需要非常簡單的東西,你甚至可以考慮不使用QuickGraph。好的是,一旦你掌握了基礎知識,QuickGraph會爲你做一些TON,這很難實現。 – Doug 2010-05-11 19:11:29