Программа 9 с.101 Кирсанов М.Н,
Графы в Maple
Транзитивное замыкание
> | restart: with(LinearAlgebra): n:=4: |
> | A:=Matrix([[1,0,0,1],[1,0,0,0],[0,0,0,0],[0,0,1,1]]); |
> | `IsMatrixShape/trnztv` := proc(A) |
> | local i,j,m,S: |
> | S:=true: |
> | for i to n do |
> | for j to n do |
> | for m to n do |
> | if(A[i,m]*A[m,j]=1) then S:= S and is(A[i,j]=1);fi; |
> | od; |
> | od; |
> | od: |
> | end: |
> | IsMatrixShape(A,trnztv);#Проверка транзитивности |
> | if IsMatrixShape(A,symmetric) then print("Неограф") else print("Орграф"); fi; |
> | if Trace(A)=n then print("Граф рефлексивного отношения");fi; |
> | if Trace(A)=0 then print("Граф антирефлексивного отношения");fi; |
> | if IsMatrixShape(A,zero) then print("Пустой граф"); fi; |
> | A:=subs(1=true,0=false,A); |
> | for m to n do #Алгоритм Уоршолла |
> | for i to n do |
> | for j to n do |
> | A[i,j]:=A[i,j] or (A[i,m] and A[m,j]); |
> | od; |
> | od; |
> | od; |
> | A:=subs(true=1,false=0,A); |
> | IsMatrixShape(A,trnztv);#Проверка транзитивности |