計算量N^2の方法による解法。
search(R,[L],[R],L):-!.
search(R,[L|Ls],[R|Ls],L):-
nth1(1,L,U),
U =\= 0,
!.
search(R,[L|Ls],[L|Ls1],L1):-
search(R,Ls,Ls1,L1).
dell(_,[],[],[]):-!.
dell(M,[X|Xs],[Y|Ys],[Z|Zs]):-
Z is Y-X*M,
dell(M,Xs,Ys,Zs).
mult(Dell,Num,Num1):- Dell=\=0,Num1 is Num/Dell.
mult(_,Num,Num):-!.
dell_List(_,[],[]):-!.
dell_List(L,[L1|Ls1],[L2|Ls2]):-
[E|_]=L,
[E1|_]=L1,
mult(E,E1,M),
dell(M,L,L1,L2),
dell_List(L,Ls1,Ls2).
dell_top([],[]):-!.
dell_top([[_|Ls]|Ls1],[Ls|Result]):-
dell_top(Ls1,Result).
gyouretu_t([[E]],[E1],S):-!,write([e,E,S]),E1 is E*S.
gyouretu_t(Mat,[E|Result],S):-
[R|Mat1]=Mat,
[E|_]=R,
((E =\=0 ->Mat2 = Mat1,S1 is S,L = R);(search(R,Mat1,Mat2,L)),S1 is -S),
dell_List(L,Mat2,Mat3),
dell_top(Mat3,Mat4),
[E|_]=L,
write(S1),
gyouretu_t(Mat4,Result,S1).
mult_list([],M,M):-!.
mult_list([X|Xs],M,R):-
M1 is M*X,
mult_list(Xs,M1,R).
gyouretu_tW(Mat,Ans):-
gyouretu_t(Mat,Es,1),
write(Es),
mult_list(Es,1,Ans).
最終更新:2015年06月15日 14:47