[ vladacks @ 15.08.2010. 18:51 ] @
Imam problem pri resavanju nekoliko sahovskih problema u C/C++, pa ako neko zna da mi bilo kako pomogne ili da savet, neka to pod hitno ucini :)). Problemi glase:

1.Pozicije 5 dama na sahovskoj tabli dimenizije 8×8 biraju se metodom slucajnog izbora. Ukoliko dame ne pokrivaju sva polja na sahovskoj tabli, odrediti polje za crnog kralja sa kojeg moze da odigra na najveci broj slobodnih polja.

2. Na sahovskoj tabli dimenizje n × n postaviti n super-dama tako da se medjusobno ne napadaju. Super- dama se krece kao Dama+Skakac.

3. Na sahovskoj tabli dimenizje 8×8 metodom slucajnog izbora biraju se pozicije belog i crnog skakaca. U programu se izvodi kretanje belog skakaca samo u slucaju ako beli skakac sa svoje pozicije ne moze da odigra ni na jedno polje (x, y) na koje moze da odigra crni skakac (sa svoje pozicije) – u suprotnom slucaju izvodi se kretanje crnog skakaca. Skakaci u toku kretanja ne smeju dva i vise puta da odigraju na isto (svoje) polje. U slucaju kada oba skakaca sa svojih pozicija ne mogu da odigraju ni na jedno polje, prikazati na ekranu terminala njihove putanje kretanja.

Unapred Hvala na svakoj informaciji!!!!
[ Srđan Pavlović @ 15.08.2010. 19:07 ] @
Preduslovi za uspesno resavanje zadatka: znas kako se krecu dama i kralj :)

Ako je ovo ispunjeno, idemo dalje:

1.

a) Random funkcijom odredis polozaj 5 dama na sahovskoj ploci (sahovska ploca x=1 do 8, y=1 do 8),
i proveris samo da se ne poklapa slucajno polozaj jedne od tih 5, ako se poklapa ponovo randomizujes dok
ne dobijes 5 razlicitih pozicija. Upamtis pozicije u neke promenljive tipa dama-1(x,y), itd... dama-5(x,y)..

b) Treba da vidimo da li te dame pokrivaju sva sahovska polja. Jednostavno krenes redom od dame-1
do dame-5, a posto znas kako se dama krece, znaces i kako da proveris da li je recimo dama-3 napala
(pokrila) polje (1,1) recimo (u sahovskoj terminologiji to bi bilo A1 polje) i jednostavno sacuvas u neki
niz sva polja koja dama-1 napada, i tako za svih 5 dama. Posle proveris da li svi ti nizovi pokrivaju sva
polja na tabli. Ako dame ne pokrivaju sva polja, prelazis na sledeci korak koji se trazi u zadatku

(recimo za vertikalne i horizontalne provere:

Ako je dama-1 na (3,6) poziciji (C6 u sahu) onda su napadnuta polja { 3,(1 do 8) i (1 do 8), 6 }
sto ce reci cela "C" vertikala i cela "6" horizontala su napadnute.

Sto se tice kosih provera, isto nije tesko (dodajes ili oduzimas po jedan, dva, tri... x i y u granicama 1,1 do 8,8 od pozicije dame)

c) Kralj moze da se krece u svakom pravcu po 1 polje, sto znaci da je maksimalna vrednost polja koje
nam treba "osam minus napadnuta polja" da bi mogli da vidimo na koliko moze da odigra, jer naravno
moze samo na nenapadnuta polja da odigra. To ces uraditi tako sto iz onog velikog niza svih napadnutih
polja od strane 5 dama koji vec imas upamcen - napravis prolaz kroz petlju koji ce da napravi novi niz
u svakom prolazu gledajuci koliko polja oko nekog polja je slobodno (znaci proveris A1, (1,1), pa A2 (1,2)... itd, sva 64 polja.

Posle iz niza izvuces najveci broj.

Naravno podrazumeva se da znas C / C++ , lako ces nacrtati tablu i figure ako treba ako vec znas pozicije
i ako se trazi da se to graficki predstavi.

Tako bih nekako resio prvi zadatak....


[Ovu poruku je menjao Srđan Pavlović dana 15.08.2010. u 20:26 GMT+1]
[ vladacks @ 16.08.2010. 20:30 ] @
Hvala na savetu za ovaj zadatak!
Prilicno lepo resenje. Ne trazi se graficka predstava, vec samo prost izlaz-stampanje pozicija kraljice i kralja.
Pokusavao sam da resimu C-u, ali opet nailazim na poteskoce, jer ne poznajem C dovoljno dobro.
Ako mozes, i ako imas vec uradjen kod za ovaj ili bilo koji od ovih zadataka, prosledi mi :)
Unapred zahvalan!!!