我有一個列表,表示節點(邊)之間的連接在一個ipotetically圖中;列表的結構類似於該:代表一個類似於後繼者列表的「圖形」
val def_graph : ((int * int) * (int * int)) list =
[((0, 0), (2, 1)); ((0, 0), (1, 2)); ((0, 1), (2, 0)); ((0, 1), (2, 2));
((0, 1), (1, 3)); ((0, 2), (2, 1)); ((0, 2), (2, 3)); ((0, 2), (1, 0));
((0, 2), (1, 4)); ((0, 3), (2, 2)); ((0, 3), (2, 4)); ((0, 3), (1, 1));
((0, 3), (1, 5)); ((0, 4), (2, 3)); ((0, 4), (2, 5)); ((0, 4), (1, 2));
((0, 4), (1, 6)); ((0, 5), (2, 4)); ((0, 5), (2, 6)); ((0, 5), (1, 3));
((0, 5), (1, 7)); ((0, 6), (2, 5)); ((0, 6), (2, 7)); ((0, 6), (1, 4));
((0, 7), (2, 6)); ((0, 7), (1, 5)); ((1, 0), (3, 1)); ((1, 0), (0, 2));
((1, 0), (2, 2)); ((1, 1), (3, 0)); ((1, 1), (3, 2)); ((1, 1), (0, 3));
((1, 1), (2, 3)); ((1, 2), (3, 1)); ((1, 2), (3, 3)); ((1, 2), (0, 0));
((1, 2), (0, 4)); ((1, 2), (2, 0)); ((1, 2), (2, 4)); ((1, 3), (3, 2));
((1, 3), (3, 4)); ((1, 3), (0, 1)); ((1, 3), (...)); ...]
其中節點是由元組rapresented((0,0)是一個節點,(1,3)是一個節點...等)和((0 ,0),(2,1))表示節點(0,0)和節點(2,1)之間的連接;
如何用任何節點的後繼列表來表示我的「圖形」? 結果必須是:
val succ_graph : ((int * int) * (int * int) list) list =
[((0,0),[(2,1),(1,2)]);((0,1),[(2,0),(2,2),(1,3)]);((0,2),[(2,1),(2,3),
(1,0),(1,4)]); .... ]
元組的列表,其中第一個參數是節點本人和第二參數是對他的任何後續的列表;
我寫了一個函數,提取後繼給出一個特定的節點的列表,但我不知道如何做其餘的。
let succ arcs node =
let rec aux = function
[] -> []
| (x,y)::rest -> if x = node then y::aux rest
else aux rest
in aux arcs;;
對不起,但這是我第一次使用ocaml,對不起英文不好!
謝謝。
你是對的....其實我寫錯了這個例子....實際上我想得到這樣的結果((int * int)*(int * int)list),這個rapresent這個((0,0),[(2,1),(1,2)]);((0,1),[(2,0),(2,2),(1,3 )]);((0,2),[(2,1),(2,3), (1,0),(1,4)]); ....]。對於每個單個節點,我想要一個包含第一個元素的元組列表,而第二個參數包含他的後繼元素。 我希望我現在更好地解釋自己! – mf87