Generowanie permutacji kwadratu

0

Czy wie może ktoś czy istnieje sposób wygenerowania wszystkich permutacji kwadratu, który ma np. 4 pola i suma ma być np.15. Chodzi mi by wypisać wszystkie możliwe kombinacje jakie możemy wpisać w te pola by uzyskać sumę 15.

0

Jemu chodzi o magiczny kwadrat ;] tzn np. o:
9 6
6 9
suma pionowo i poziomo wynosi 15
Istnieje sposób. Najłatwiej za pomocą constraint programmingu.

0

Widzę że bez rekurencji się nie obejdzie jeśli liczba kwadratów jest zmienna jak i suma. Tylko że nie wiem jak to rozwiązanie będzie działać np. dla 100 kwadratów(złożoność o ZGROZA n^100). Nie wiem czy dobrze rozumiecie mój problem. Podam jaśniejszy przykład
Wejście : 8 4
Wyjście :
5 1 1 1
4 2 1 1
3 3 1 1
2 2 2 2
3 2 2 1
3 3 1 1
3 2 2 1
(*to chyba wszystkie)
Nie ma szybszego sposobu by to wygenerować nie korzystając z poczwórnej pętli ?

0

Rozumiem że w ogóle pominąłeś posty które pokazywały jak się uzywa constraint programmingu? o_O

0

Spojrzałem teraz na przykład z tej strony i jest trochę niezrozumiały ;)

proc {Money Root}
   S E N D M O R Y
in 
   Root = sol(s:S e:E n:N d:D m:M o:O r:R y:Y)       % 1
   Root ::: 0#9                                      % 2
   {FD.distinct Root}                                % 3
   S \=: 0                                           % 4
   M \=: 0
                1000*S + 100*E + 10*N + D            % 5
   +            1000*M + 100*O + 10*R + E
   =: 10000*M + 1000*O + 100*N + 10*E + Y
   {FD.distribute ff Root}
end

Kurdę, nie ma nic w c++. A da się to zrobić rekurencją ?

1 użytkowników online, w tym zalogowanych: 0, gości: 1