2010-11-28 53 views
0

我對像這樣解決類繼承算法

​​

類繼承的信息列表,是否有任何特定的運算法則壓扁這一信息?

像這樣:

人員 - > SpecialPerson - > VerySpecialPerson

+0

不應該第一行是'[null,Person]`? – Dialecticus 2010-11-28 13:25:05

回答

1

在最後,它歸結爲一個DAG(有向無環圖)。因此,您可以執行廣度優先搜索或深度優先搜索。你只需要樹木的簡單情況。

例(BFS,僞代碼,未經測試):

List<Array<Typespec>> flatten(Array<Pair<Typespec,Typespec>> input) { 
    List<Array<Typespec>> result; 
    Queue<Array<Typespec>*> q; 

    var elem=&result.append([null]); 
    q.append(elem); 
    while (!q.empty()) { 
    for (i in input) { 
     if (i.first==q.front().back()) { 
     var elem=&result.append(q.front().clone().append(i.second)); 
     q.append(elem); 
     } 
    } 
    q.pop_front(); 
    } 
    return result; 
} 

這是假設你的意思是[null,Person],而不是倒過來。請注意,它在每個結果開始時產生一個null,與您的示例不同。

+0

我曾經見過的最糟糕的僞代碼^^但請注意一點... – c0rnh0li0 2010-11-28 19:06:35