#Кирсанов М.Н. Графы в Maple , М.: Физматлит 2007
> | #Программа 27 с. 134 |
Наибольшее паросочетание в графе
> | restart: with(networks): |
> | new(G): |
> | n:=3: # Число вершин в каждой доле |
> | V:=$1..2*n:# Вершины |
> | r:=[seq(n+1-i,i=1..n)],[seq(2*n+1-i,i=1..n)]: |
> | addvertex(V,G): |
> | #addedge([{1,7},{1,8},{1,9},{1,10},{1,11},{1,12}, #{2,7},{2,8},{3,7},{3,9},{4,7},{4,9},{4,10},{4,11},{4,12},{5,7},{6,12}],G):# Пример на с.128 |
> | addedge([{1,4},{2,4},{2,5},{2,6},{3,5}],G): # c.134 |
> | draw(Linear(r),G); |
> | A:=Matrix(n):# |
> | for x in edges(G) do |
> | A[ends(x,G)[1],ends(x,G)[2]-n]:=1; |
> | od: |
> | A; |
> | read "C:\\bipart.m"; |
> | B:=Matrix(n): |
> | BipartCard(A): |
> | B_=B; |
> | E:={}:#Ребра для графа наибольшего паросочетания |
> | for i to n do |
> | for j to n do |
> | if B[i,j]=1 then E:=E union {{i,j+n}} fi: |
> | od; |
> | od; |
Наибольшее паросочетание
> | new(G1): addvertex(V,G1): |
> | addedge(E,G1): draw(Linear(r),G1); |
Число совершенных паросочетаний
> | LinearAlgebra[Permanent](B); |