Nyolc királynő problémában királynők valid elhelyezése?
Elkezdtem megírni a 8 királynő probléma táblás játékot és nem tudom, hogy hogyan tudnám ellenőrizni azt, hogy ha teszek le egy új királynőt, akkor ezt a többi ne üsse. Úgy csinálom az egészet, hogy mikor a 8x8 as kezdetben üres sakk táblára le teszek egy királynőt, akkor egy boolean volt [8] [8] as mátrixban, (amiben kezdetben minden elem, hamis) azt az elemet ahova tettem a királynőt igazzá állítom, viszont most kellene egy metódus ahol tudnám ellenőrizni, hogy ahova clicckelek(raknám az új kir.nőt) az a volt[8][8] as igaz elemeit átlósan, vízszintesen, függőlegesen nem e metszi. HOgyan tudnám ezt megcsinálni? Köszönöm a segítséget előre! :)
UI: Java-ban írom a játékot
Szóval az oszlopot és a sort azt tudom ellenőrizni, hogy ott nincs e királynő, de az átlóira nincs ötletem, hogy kellene végig járni, eddig így áll a metódusom:
private boolean rossze(int sor, int oszlop){
for(int j=0; j<M; j++){
if(volt[sor][oszlop]!=volt[sor][j]){
return false;
}
else if(volt[sor][oszlop]!=volt[j][oszlop]){
return false;
}
else if(volt[sor][oszlop]!= ){
return false;
}
}
return true;
}
Az első if ellenőrzi a sorát, a következő else if az az oszlopát és a harmadik else if be kellene, az ami az átlóit
# 2/2 Időpont ma 17:16
Először gondolkodj csak 3x3-as táblában, aminek a közepére leraksz egy királynőt? Mi lesz a 4 átló koordinátája? Aztán 4x4, 5x5, stb.
Szia.
Szerintem egy sima if, megnézed, hogy a 8x8-as mátrixnak az aktuális poziciója (ahová éppen leraknád a királynőt,) az hamis-e, ha hamis, az akkor azt jelenti, hogy nem kerül űtésbe az éppen lerakott királynő.
Ehhez viszont az kell, hogy ne csak azt az elemet állítsd igazra ahová leraktad a királynőt, hanem a királynő által bejárható területet mind.
Ez viszont ciklussal (For ciklus) tudod megtenni, a királynő sorába, oszlopába illetve átlósan eső mátrix elemeket, is át kell billenteni hamisról igazra.
Sok sikert.
Üdv.
> hogyan tudok ellenőrizni a szélekig?
Pl. ha (x < 0 || x > 7), akkor x kívül van.
Én a Javához nem is konyítok, de Lazarusban megírtam, köszi a tippet.
Nálam így néz ki például a balra fel és jobbra lemenő átlós letiltás (X, Y a királynő koordinátái):
tx := X; ty := Y;
while (tx > 0) and (ty > 0) do
begin
Dec(tx); Dec(ty);
tomb[tx, ty] := tilto;
end;
tx := X; ty := Y;
while (tx < 7) and (ty < 7) do
begin
Inc(tx); Inc(ty);
tomb[tx, ty] := tilto;
end;
Kapcsolódó kérdések:
Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!