通过邻接矩阵创建邻接列表

时间:2019-12-08 13:03:03

标签: prolog

我需要编写一个程序,该程序将基于图的表示创建一个邻接表,以邻接矩阵的形式给出。

示例

input-包含元素列表的列表

[[0,1,1],[1,0,1],[1,1,0]].

输出

[[0,2,3],[1,0,3],[1,2,0]]



我已经尝试过这个了:

indexof(Index, Item, List):-
  nth1(Index, List, Item).

replace(I, L, E, K) :-
  nth1(I, L, _, R),
  nth1(I, K, E, R).

f([], []).
f([H|Tail], [Z|RezTail]):-
    member(E,H),
    E =:= 1,
    indexof(X, E, H),
    replace(X, H, X, Z),
    f(Tail, RezTail).

输入-f([[0,1,1],[1,0,1],[1,1,0]], Z). 输出-Z = [[0, 2, 1], [1, 0, 1], [1, 1, 0]]


如您所见,问题是找到第一个“ 1”后,程序将递归并跳过列表中的其他项。有什么办法可以避免这种情况?

1 个答案:

答案 0 :(得分:2)

怎么样

fh([], [], _).
fh([0|T1], [0|T2], I) :-
  Ip is I+1,
  fh(T1, T2,Ip).
fh([_|T1], [I|T2], I) :-
  Ip is I+1,
  fh(T1, T2, Ip).


f([], []).
f([H1|T1], [H2|T2]) :-
  fh(H1, H2, 1),
  f(T1, T2).

如此:

?- f([[0,1,1],[1,0,1],[1,1,0]],X).

评估为:

X = [[0, 2, 3], [1, 0, 3], [1, 2, 0]]