Nevíte-li si rady s jakýmkoliv matematickým problémem, toto místo je pro vás jako dělané.
Nástěnka
❗22. 8. 2021 (L) Přecházíme zpět na doménu forum.matweb.cz!
❗04.11.2016 (Jel.) Čtete, prosím, před vložení dotazu, děkuji!
❗23.10.2013 (Jel.) Zkuste před zadáním dotazu použít některý z online-nástrojů, konzultovat použití můžete v sekci CAS.
Nejste přihlášen(a). Přihlásit
Ahoj,
snažím se vytvořit program, který bude generovat sudoku. Prozatím řeším, jak rozmístit čísla do čtverce 9x9 aby se v žádném řádku, sloupci ani menších polích 3x3 neopakovali dvě čísla (předpokládám, že všichni vědí jak vypadá sudoku).
Nějak nemůžu přijít na to, jaký zvolit efektivní postup. Můj první návrh měl fungovat asi takto:
1. vygeneruju dvourozměrné pole a každý ř'ádek vyplním čísly 1-9, následně je promíchám.
2. zjistím jestli se ve sloupečkách neopakují dvě čísla a pokud ano, promíchám to znovu (a tady už narážím na problém).
3. zajistit aby se neopakovala čísla na souřadnicích [1,1],[1,2],[1,3],[2,1],[2,2],[2,3],[3,1],[3,2],[3,3] a pak i v dalších čtverečcích 3x3. (ale to už mi začíná připadat strašně komplikované a vůbec nevím jak bych to naprogramoval).
Neexistuje nějaký snazší způsob jak generovat sudoku ? Díky :)
Offline
↑ Mythic:
Nepřemýšlel jsem o tom moc do hloubky, ale dělal bych to jinak. Náhodně umístím čísla 1-9 do prvního řádku. Pak jdu na druhý řádek, a půjdu po číslech. Nejdřív jednička. V prvním řádku už jedna je, a určitě padla do jednoho z těch devíti bloků. Takže ji mohu umístit už jen na šest políček. Umístím ji náhodně na jedno z nich. Totéž 2-9. Totéž třetí řádek, tam už pro každé číslo budu mít jen tři možnosti.
Čtvrtý řádek. Tam mi na chvíli vypadne kontrola těch bloků, ale zase se budu muset dívat jestli náhodou už dané číslo není někde nad aktuálním políčkem. Atd. Atd.
Jak to udělat efektivně, to rozmyšlené nemám. Ale vzhledem k šílenosti tvého návrhu ti o to asi nejde, takže klidně hrubou silou. V každém kroku vybrat index políčka na daném řádku, zkusmo tam číslici umístit, a zkusit jestli porušuje nějakou podmínku. Pokud ano, umístím ji na jinou pozici. Pokud ne, jdu na další číslici.
To by mělo fungovat, myslím.
Offline
Zdravím,
tady jsem ti naprogramoval generátor plného pole sudoku v Pythonu. Funguje to v pohodě, jedno sudoku je vygenerovano cca za 7 ms. Funkci "tisk" ignoruj, ta pouze vypise sudoku na obrazovku.
Sudoku:
Offline