A Maple egy fejlett matematikai problémamegoldó és programozói szoftver.
-
xDJCx #454 A gráfos feladatra egy megoldás, nagy n-re itt sem érdemes próbálkozni:
SZINEZES2:=proc(n::posint)
local reszhalmazok,szamuk,reszhalmazokhalmaza,csucsnevek,G,R,H,k,m;
uses GraphTheory;
if n<2 then return "Kevés a pontok száma!";end if;
reszhalmazok:=combinat:-choose(n,2);#2 elemu reszhalmazok eloallitasa
reszhalmazokhalmaza:=map(convert,reszhalmazok,set)[];# tipuskonverzio halmazza
szamuk:=nops(reszhalmazok);# ezek szama, ez eppen n alatt a 2 lenne
R:={}:# elek letrehozasa
for k from 2 to szamuk do
for m from 1 to k-1 do
if `intersect`(reszhalmazokhalmaza[k] , reszhalmazokhalmaza[m])={} then R:=R union {{k , m}}:end if;end do;end do;
G := Graph([$1..szamuk]);AddEdge(G, R);# graf letrehozasa
csucsnevek:=map(t->convert(t,'string'),[reszhalmazokhalmaza]);# csucsok cimkezesehez
H := RelabelVertices(G, csucsnevek);# csucsok uj cimkekkel ellatasa
print(cat("Csúcsszinezési szam: ",ChromaticNumber(H)));# csúcsszínezési szám
DrawGraph(H);
end proc;
SZINEZES2(5);