(カックロ ) Ivo Ivanišević Ena Melvan Kakuro (カックロ ) Ivo Ivanišević Ena Melvan
1.Uvod
Prvi put objavljen u Dell Magazine 1966.godine pod nazivom Cross Sum 1980. god u Japanu doživio pravi bum (izdavačka kuća Nikoli prodala preko milijon knjiga o njima) Dobiva naziv Kasan Kurosu (kombinacija japanske riječi za zbrajanje i izgovora riječi “cross”) 6.god kasnije naziv skraćen u Kakuro Prodor na zapad: tek 2005.god kada The Guardian i Daily Mail započinju sa njihovim dnevnim objavljivanjem
Kombinatorni problem raspodjele brojeva na ploči Cilj je ispuniti bijela polja prema zadanim uvjetima Zadan je broj kojeg treba rastaviti na određeni broj pribrojnika u retku/stupcu Pribrojnici smiju biti brojevi od 1,....,9 i ne smiju se ponavljati Npr. 6=1+2+3 ; 1+5 ; 2+4, ali NE 3+3
2.Implementacija 2.1 Programsko okruženje C++ windows okruženje
2.2 Implementacija ploče Tablica reprezentirana kao matrica koja se sastoji od klasa Elementi klase: stanje,s,p,r,tmpr,tmps,dr,ds Zašto? stanje=‘s’ (s,p,r,tmpr,tmps,dr,ds)=(7,0,0,0,7,0,2) stanje=‘r’ (s,p,r,tmpr,tmps,dr,ds)=(0,0,13,13,0,3,0)
Informacije se čitaju iz 3 datoteke VRIJEDNOSTI DULJINE STANJA X 9 Informacije se čitaju iz 3 datoteke VRIJEDNOSTI DULJINE STANJA (0,0,0,0,0,0,0) 2 2 X S (9,0,0,0,9,0,1) R P (0,0,9,9,0,1,0) (0,0,0,0,0,0,0)
2.3 Implementacija algoritma Backtracking algoritam Pretraživanje prostora stanja u dubinu 5 pomoćnih funkcija Osnova algoritma: -četiri “if bloka” koji određuju četiri moguća stadija upisa u matricu
if(x[r.first][r.second].dr>1 && x[s.first][s.second].ds>1) { if(x[r.first][r.second].tmpr-i>0 && x[s.first][s.second].tmps-i>0) x[t.first][t.second].p=i; x[r.first][r.second].tmpr=x[r.first][r.second].tmpr-i; x[r.first][r.second].dr=x[r.first][r.second].dr-1; x[s.first][s.second].tmps=x[s.first][s.second].tmps-i; x[s.first][s.second].ds=x[s.first][s.second].ds-1; if(backtrack(x,tmp,temp)==true) return(true); } else x[t.first][t.second].p=0; x[r.first][r.second].tmpr=x[r.first][r.second].tmpr+i; x[r.first][r.second].dr=x[r.first][r.second].dr+1; x[s.first][s.second].tmps=x[s.first][s.second].tmps+i; x[s.first][s.second].ds=x[s.first][s.second].ds+1;
3. Složenost algoritma Eksponencijalna složenost O(9ˆn),n broj slobodnih mjesta za upis Složenost uvelike varira ovisno o zadanom problemu U specijalnim slučajevima O(n)?!?!
4.Testiranja i… Testiranja su izvršena nad 3 ploče Dimenzije ploča 6*6, 8*8 te 16*16 Rješavanja većih problema otežano stvaranjem ispravnih datoteka za rad programa Dodatno je testirano vrijeme i brzina izvođenja programa
…rezultati Svi test primjeri su točno riješeni. Sva rješenja test primjera su imala vrijeme izvršavanja <0.5 sekunde Brzina izvodjenja je ispod 1μs za sva tri problema
4.Literatura http://www.iaeng.org/IJCS/issuesv37/issue_2/IJCS_37_2_01.pdf http://en.wikipedia.org/wiki/Kakuro http://www.krazydad.com/kakuro/ http://www.lamsade.dauphine.fr/~cazenave/papers/kakuro.pdf