Forum » Programiranje » n kraljic
n kraljic
JaaZoo ::
Ukvarjam se s problemom kako spraviti n kraljic na sahovsko desko tako da se pri tem ne napadajo.Imam dve funkciji (ena pove ali je bila kraljica napadena ali ne, druga pa najde vse ugodne postavitve)
Generiral sem si tudi matriko ki naj bi služila kot šahovnica.
Sedaj pa ne vem kako bi naredil, da bi prvo kraljico vstavil jaz ostale kraljice pa bi vstavljal avtomatsko s pomocjo zgornjih dveh funkcij.
Teoretično naj bi slo nekako tako da v prvem koraku dam kraljico v 1.stolpec, v drugem koraku v drugi stolpec in tako naprej do n -tega stolpca.Stolpec sahovske deske je j=1,2,...,n, vrstica i pa pripada i-ti kraljici s čimer se izloči možnost da bi bile dve kraljici v isti vrstici.
Prosim če kdo ve rešitev oz.če je že delal kaj podobnega da mi svetuje kako naprej!
k=vrstica v kateri je k-ta kraljica
x[k]=oznacuje stolpec v katerem je k -ta kraljica
Hvala!!!
Generiral sem si tudi matriko ki naj bi služila kot šahovnica.
Sedaj pa ne vem kako bi naredil, da bi prvo kraljico vstavil jaz ostale kraljice pa bi vstavljal avtomatsko s pomocjo zgornjih dveh funkcij.
Teoretično naj bi slo nekako tako da v prvem koraku dam kraljico v 1.stolpec, v drugem koraku v drugi stolpec in tako naprej do n -tega stolpca.Stolpec sahovske deske je j=1,2,...,n, vrstica i pa pripada i-ti kraljici s čimer se izloči možnost da bi bile dve kraljici v isti vrstici.
Prosim če kdo ve rešitev oz.če je že delal kaj podobnega da mi svetuje kako naprej!
k=vrstica v kateri je k-ta kraljica
x[k]=oznacuje stolpec v katerem je k -ta kraljica
Hvala!!!
snow ::
S critticallom.. nice idea :)
Sem pa bral da se da zadeva tudi z nevronskimi mrežami delat. Hopfield nevronskimi mrežami.. sam tega po moje ne boš šel delat.
Sicer pa se zadeva dela z raznimi search algoritmi. Ampak evolucija je bolš :)
Sem pa bral da se da zadeva tudi z nevronskimi mrežami delat. Hopfield nevronskimi mrežami.. sam tega po moje ne boš šel delat.
Sicer pa se zadeva dela z raznimi search algoritmi. Ampak evolucija je bolš :)
Random mutation plus nonrandom cumulative natural selection - Richard Dawkins
hash ::
Zadevo lahko resis kot je ze bilo omenjeno z evolucijskim algoritmom, lahko pa tudi uporabis rekurzijo in tehniko imenovano backtracking.
EDIT: Malo cudno deluje ta forum, sem dodal eno piko, pa mi kar ni prikazalo, uspelo sele v cetrtek poskusu.
EDIT: Malo cudno deluje ta forum, sem dodal eno piko, pa mi kar ni prikazalo, uspelo sele v cetrtek poskusu.
Zgodovina sprememb…
- spremenil: hash ()
mchaber ::
o X o o o o o o
o o o X o o o o
o o o o o X o o
o o o o o o o o
o o o o o o X o
o o o o X o o o
o o X o o o o o
X o o o o o o o
o o o X o o o o
o o o o o X o o
o o o o o o o o
o o o o o o X o
o o o o X o o o
o o X o o o o o
X o o o o o o o
.
Thomas ::
$DIMENSIONS X[280] Y[280]
$SHOWVAR solutions
$DECLAREINT x0 x1 x2 x3 x4 x5 x6 y0 y1 y2 y3 y4 y5 y6 zero upper dx dy i ok solutions
$RETVAR X[] Y[]
upper=7;
upper--;
zero=0;
x0=0;x1=1;x2=2;x3=3;x4=4;x5=5;x6=6;
for (y0=zero;y0<=upper;y0++) {
for (y1=zero;y1<=upper;y1++) {
dx=x1-x0;dx=abs(dx);dy=y1-y0;dy=abs(dy);
ok=1;
if (dx==zero) {ok=0;}
if (dy==zero) {ok=0;}
if (dx==dy) {ok=0;}
if (ok!=zero) {
for (y2=zero;y2<=upper;y2++) {
dx=x2-x0;dx=abs(dx);dy=y2-y0;dy=abs(dy);
ok=1;
if (dx==zero) {ok=0;}
if (dy==zero) {ok=0;}
if (dx==dy) {ok=0;}
if (ok!=zero) {
dx=x2-x1;dx=abs(dx);dy=y2-y1;dy=abs(dy);
ok=1;
if (dx==zero) {ok=0;}
if (dy==zero) {ok=0;}
if (dx==dy) {ok=0;}
if (ok!=zero) {
for (y3=zero;y3<=upper;y3++) {
dx=x3-x0;dx=abs(dx);dy=y3-y0;dy=abs(dy);
ok=1;
if (dx==zero) {ok=0;}
if (dy==zero) {ok=0;}
if (dx==dy) {ok=0;}
if (ok!=zero) {
dx=x3-x1;dx=abs(dx);dy=y3-y1;dy=abs(dy);
ok=1;
if (dx==zero) {ok=0;}
if (dy==zero) {ok=0;}
if (dx==dy) {ok=0;}
if (ok!=zero) {
dx=x3-x2;dx=abs(dx);dy=y3-y2;dy=abs(dy);
ok=1;
if (dx==zero) {ok=0;}
if (dy==zero) {ok=0;}
if (dx==dy) {ok=0;}
if (ok!=zero) {
for (y4=zero;y4<=upper;y4++) {
dx=x4-x0;dx=abs(dx);dy=y4-y0;dy=abs(dy);
ok=1;
if (dx==zero) {ok=0;}
if (dy==zero) {ok=0;}
if (dx==dy) {ok=0;}
if (ok!=zero) {
dx=x4-x1;dx=abs(dx);dy=y4-y1;dy=abs(dy);
ok=1;
if (dx==zero) {ok=0;}
if (dy==zero) {ok=0;}
if (dx==dy) {ok=0;}
if (ok!=zero) {
dx=x4-x2;dx=abs(dx);dy=y4-y2;dy=abs(dy);
ok=1;
if (dx==zero) {ok=0;}
if (dy==zero) {ok=0;}
if (dx==dy) {ok=0;}
if (ok!=zero) {
dx=x4-x3;dx=abs(dx);dy=y4-y3;dy=abs(dy);
ok=1;
if (dx==zero) {ok=0;}
if (dy==zero) {ok=0;}
if (dx==dy) {ok=0;}
if (ok!=zero) {
for (y5=zero;y5<=upper;y5++) {
dx=x5-x0;dx=abs(dx);dy=y5-y0;dy=abs(dy);
ok=1;
if (dx==zero) {ok=0;}
if (dy==zero) {ok=0;}
if (dx==dy) {ok=0;}
if (ok!=zero) {
dx=x5-x1;dx=abs(dx);dy=y5-y1;dy=abs(dy);
ok=1;
if (dx==zero) {ok=0;}
if (dy==zero) {ok=0;}
if (dx==dy) {ok=0;}
if (ok!=zero) {
dx=x5-x2;dx=abs(dx);dy=y5-y2;dy=abs(dy);
ok=1;
if (dx==zero) {ok=0;}
if (dy==zero) {ok=0;}
if (dx==dy) {ok=0;}
if (ok!=zero) {
dx=x5-x3;dx=abs(dx);dy=y5-y3;dy=abs(dy);
ok=1;
if (dx==zero) {ok=0;}
if (dy==zero) {ok=0;}
if (dx==dy) {ok=0;}
if (ok!=zero) {
dx=x5-x4;dx=abs(dx);dy=y5-y4;dy=abs(dy);
ok=1;
if (dx==zero) {ok=0;}
if (dy==zero) {ok=0;}
if (dx==dy) {ok=0;}
if (ok!=zero) {
for (y6=zero;y6<=upper;y6++) {
dx=x6-x0;dx=abs(dx);dy=y6-y0;dy=abs(dy);
ok=1;
if (dx==zero) {ok=0;}
if (dy==zero) {ok=0;}
if (dx==dy) {ok=0;}
if (ok!=zero) {
dx=x6-x1;dx=abs(dx);dy=y6-y1;dy=abs(dy);
ok=1;
if (dx==zero) {ok=0;}
if (dy==zero) {ok=0;}
if (dx==dy) {ok=0;}
if (ok!=zero) {
dx=x6-x2;dx=abs(dx);dy=y6-y2;dy=abs(dy);
ok=1;
if (dx==zero) {ok=0;}
if (dy==zero) {ok=0;}
if (dx==dy) {ok=0;}
if (ok!=zero) {
dx=x6-x3;dx=abs(dx);dy=y6-y3;dy=abs(dy);
ok=1;
if (dx==zero) {ok=0;}
if (dy==zero) {ok=0;}
if (dx==dy) {ok=0;}
if (ok!=zero) {
dx=x6-x4;dx=abs(dx);dy=y6-y4;dy=abs(dy);
ok=1;
if (dx==zero) {ok=0;}
if (dy==zero) {ok=0;}
if (dx==dy) {ok=0;}
if (ok!=zero) {
dx=x6-x5;dx=abs(dx);dy=y6-y5;dy=abs(dy);
ok=1;
if (dx==zero) {ok=0;}
if (dy==zero) {ok=0;}
if (dx==dy) {ok=0;}
if (ok!=zero) {
X[i]=x0;Y[i]=y0;i++;X[i]=x1;Y[i]=y1;i++;X[i]=x2;Y[i]=y2;i++;X[i]=x3;Y[i]=y3;i++;X[i]=x4;Y[i]=y4;i++;X[i]=x5;Y[i]=y5;i++;X[i]=x6;Y[i]=y6;i++;
solutions=i;
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
Man muss immer generalisieren - Carl Jacobi
Thomas ::
Downlodite tehle slabih 20 kil exeta!
Potem ga poženite s parametrom ... od 4 do 12 in dobili boste C strict program za prikaz vseh rešitev postavitev od 4 do 12 kraljic.
Če ga greste optimizirat v Critticall ... nočte vedet rezultata optimizacije!
Hehe ...
Potem ga poženite s parametrom ... od 4 do 12 in dobili boste C strict program za prikaz vseh rešitev postavitev od 4 do 12 kraljic.
Če ga greste optimizirat v Critticall ... nočte vedet rezultata optimizacije!
Hehe ...
Man muss immer generalisieren - Carl Jacobi
maddogod ::
Kaksni evolucijski algoritem in podobno sranje...
Evo ti celotno kodo napisano v C-ju:
Program deluje za šahovnico velikosti maksimalno 20 x 20. Pa že 20 x 20 dolgo računa.
Pa veselo programiranjne...
Evo ti celotno kodo napisano v C-ju:
/* Program prešteje na koliko načinov lahko na šahovnico n x n postavimo kraljice, tako da se ne napadajo */ #define MAX 20 static long kraljice(int ); main() { int n; printf("Vnesite velikost sahovnice: "); scanf("%d", &n); printf("Stevilo postavitev kraljic: %d\n", kraljice(n)); } static long kraljice(int n) { int vrstica[MAX]; /* postavitev kraljic po posamzenih vrsticah */ int stolpec[MAX]; /* evidenca o zasedenih stolpcih */ int d1[2 * MAX -1], d2[2 * MAX -1]; /* diagonale */ int i, j; long stevec = 0; /* stevilo razlicnih postavitev */ /* vse vrstice, stolpci in diagonale so prazni */ for(i=0; i < n; ++i) { vrstica[i] = -1; stolpec[i] = 0; } for(i=0; i < 2 * n - 1; ++i) d1[i] = d2[i] = 0; i = 0; while(i >= 0){ j = vrstica[i]; if(j >= 0) stolpec[j] = d1[n - i + j - 1] = d2[i + j] = 0; while(++j < n && (stolpec[j] || d1[n - i + j -1] || d2[i + j])); if(j == n) vrstica[i--] = -1; else{ vrstica[i] = j; stolpec[j] = d1[n - i +j -1] = d2[i + j] = 1; if(i == n - 1) ++stevec; /* vse kraljice so postavljene nova resitev */ else ++i; } } return stevec; }
Program deluje za šahovnico velikosti maksimalno 20 x 20. Pa že 20 x 20 dolgo računa.
Pa veselo programiranjne...
Zgodovina sprememb…
- spremenil: kopernik ()
Thomas ::
Neki nekje prepisal, potem pa govori o "evolucijskem sranju".
Heh ..
Dej ti napiši hitrejši program za tole reševanje, kot ga je sposoben iznajti Critticall.
Heh ..
Dej ti napiši hitrejši program za tole reševanje, kot ga je sposoben iznajti Critticall.
Man muss immer generalisieren - Carl Jacobi
snow ::
neka malenkost s katero se da problem lepo rešit in ni treba nevem kerih for uporabljat zraven :)
evolucijsko sranje... te je naredilo :)
evolucijsko sranje... te je naredilo :)
Random mutation plus nonrandom cumulative natural selection - Richard Dawkins
noraguta ::
saj tisto od maddogoda dela.
samo tales strict-c ne dela.
samo tales strict-c ne dela.
Pust' ot pobyedy k pobyedye vyedyot!
Thomas ::
Seveda da dela.
Deklariraj vse spremenljivke kot int in jih postavi na 0.
Deklariraj vse spremenljivke kot int in jih postavi na 0.
Man muss immer generalisieren - Carl Jacobi
Thomas ::
Mislim ... hehe ... se ti gre da tole ne bi delalo noraguta, da je že kar ganljivo.
Man muss immer generalisieren - Carl Jacobi
Vredno ogleda ...
Tema | Ogledi | Zadnje sporočilo | |
---|---|---|---|
Tema | Ogledi | Zadnje sporočilo | |
» | [MAT] Diferenciabilnost funkcijeOddelek: Šola | 2715 (1949) | Unilseptij |
» | Programiranje problem androidOddelek: Programiranje | 1186 (951) | g333kk |
» | [C++] Kako optimizirati?Oddelek: Programiranje | 2258 (1970) | Vesoljc |
» | GrafikaOddelek: Programiranje | 1716 (1068) | aaaaa93 |
» | Šah [Pacsal]Oddelek: Programiranje | 2247 (1850) | NeOman |