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);