[ Bootta @ 23.04.2007. 17:26 ] @
Evo primjer kako sam napravio program koji odreljuje polja na koja moze da dodje kraljica i t predstavio vizuelno:
Code:

#include<conio.h>
#include<math.h>
int suma(int x[],int n)
{
int i,suma;
for(i=0,suma=0;i<n;i++)
suma+=x[i];
return suma;
}
main()
{
int n,m,i1,i2,x,y,i;
int sredina();
char niz[9][9];
printf("   1 2 3 4 5 6 7 8\n   - - - - - - - -\n1 | | | | | | | | |\n   - - - - - - - -\n2 | | | | | | | | |\n   - - - - - - - -\n3 | | | | | | | | |\n   - - - - - - - -\n4 | | | | | | | | |\n   - - - - - - - -\n5 | | | | | | | | |\n   - - - - - - - -\n6 | | | | | | | | |\n   - - - - - - - -\n7 | | | | | | | | |\n   - - - - - - - -\n8 | | | | | | | | |\n   - - - - - - - -");
printf("\n\nUnesite broj redova(n) i broj kolona(m) (0<=n,m=<8): ");
scanf("%d%d",&n,&m);
printf("\nUnesite poziciju kraljice(y,x)(1<=n,m=<8):");
scanf("%d%d",&y,&x);
printf("\nSada se niz(ovi) ucitava(ju);\n");
for(i1=1;i1<=n;i1++)
{
for(i2=1;i2<=m;i2++)
{
if(i1==y||i2==x||abs(y-i1)==abs(x-i2))
{
niz[i1][i2]='*';
goto step;
}
niz[i1][i2]='0';
step:
}
}
printf("Sada se niz(ovi) ispisuje/ju: \n");
printf(" 0 = polja na koja kraljica ne moze doci\n");
printf(" * = polja na koja kraljica moze doci\n");
printf(" k = pozicija kraljice\n");

niz[y][x]='k';
printf("     ");
for(i=1;i<=m;i++)
printf("%d ",i);

for(i1=1;i1<=n;i1++)
{
printf("\n     ");
for(i=1;i<=m;i++)
printf("- ");
printf("\n%d   |",i1);
for(i2=1;i2<=m;i2++)
{
printf("%c|",niz[i1][i2]);
}
}
printf("\n    - - - - - - - -");
getch();
}

Jel neko zna napravit program koji ce odredit za koliko ce najmanje poteza konj koji stoji pocetnoj poziciji(n,m) doci na odredjenu poziciju(n,m)
n=redni broj reda
m=redni broj kolone
[ igac @ 23.04.2007. 23:29 ] @
u 8*8 oznacis sva polja sa -1, pocetno polje sa 0 i onda pocnes od tog 0 polja i skaces (kako vec konj moze skakati, 8 mogucih skokova) sve dok ne skocis na polje[xe][ye] (na polje na koje trebas doci konjem)... kada skocis na to bolje izaces iz whilea i procitas onda samo taj broj :) uglavnom nesto ovako kao ovo dole...
Code:

u mainu stavis nesto ovako...
...
   for (i=1;i<=8;i++)
   {
    for (j=1;j<=8;j++)
     polja[i][j]=-1;
   }
   polja[xs][ys]=0;


   i=j=0;

   while (polja[xe][ye]==-1)
   {
    next(i);
    i++;
   }
   printf("\nMinimalan broj skokova je: %d\n",polja[xe][ye]);
...
gdje su ti xs i ys koordinate za "start" konja a xe i ye za "end"...

... 
void seti(int x, int y, int z)
{

     if ((x>0) && (x<9) && (y>0) && (y<9) && (polja[x][y]==-1))
      polja[x][y]=z;
}


void next(int step)
{
     int f,g;

      for (f=1;f<9;f++)
      {
         for (g=1;g<9;g++)
         {
          if (polja[f][g]==step)
          {


           seti(f-2,g-1,step+1);
           seti(f-2,g+1,step+1);
           seti(f+2,g-1,step+1);
           seti(f+2,g+1,step+1);
           seti(f-1,g-2,step+1);
           seti(f+1,g-2,step+1);
           seti(f-1,g+2,step+1);
           seti(f+1,g+2,step+1);
          }
         }
      }
}
...


to sam i ja kuckao prije par godina za neki 'domaci zadatak' pa eto da ti bas ne paste cijeli kod...
[ 3MAJ86 @ 25.04.2007. 19:20 ] @
Probaj da ovo uradiš uz pomoć graf-a, metodom obilaska 'u širinu' ćeš sigurno dobiti najkraći put. Graf ćeš najlakše pretstaviti preko matrice 8*8 gde je čvor polje na tabli, a u vezi će biti oni čvorovi na koje možeš doći jednim potezom sa trenutnog polja na kome se nalaziš.

Malo teorije nije na odmet :)