PDA

Vidi punu verziju : Spiralni obilazak matrice


THE_MASHIN
21.03.2005., 09:09
Da li mi neko moze pomoci oko ovoga problema, npr. u C-u. Znam da je potrebno uociti cetiri karakteristicna smjera kretanja, ali ne znam kako da napravim da se proces prebacuje sa jednog djela na drugi(od ta cetiri djela) sve dok se ne upise poslednji broj.

stormbringer
21.03.2005., 11:44
ja sam to ovako resavao. imas promenljivu d koja ti daje pravac (recimo 1 je gore, 2 desno, 3 dole, 4 levo) i ona je na pocetku 1, (X,Y)=(0,0) pozicija. ides u jednom pravcu sve dok ne stignes do kraja matrice (X=n-1 ili Y=n-1) ili dok ne naidjes da je sledeci element u tom pravcu popunjen.

evo, ovo sam kucao pre nekog vremena:
#include "stdafx.h"
using namespace std;

int _tmain(int argc, _TCHAR* argv[])
{
int a[100][100], n, i, j, d = 0;
scanf("%d", &n);
for (i = 0; i < n; i++)
for (j = 0; j < n; j++)
a[i][j] = 0;
i = j = 0;
for (int k = 1; k <= n * n; k++)
{
a[i][j] = k;
switch (d)
{
case 0: if ((j == n - 1) || (a[i][j + 1]))
{
d = 1;
i++;
}
else
j++;
break;
case 1: if ((i == n - 1) || (a[i + 1][j]))
{
d = 2;
j--;
}
else
i++;
break;
case 2: if ((j == 0) || (a[i][j - 1]))
{
d = 3;
i--;
}
else
j--;
break;
case 3: if ((i == 0) || (a[i - 1][j]))
{
d = 0;
j++;
}
else
i--;
break;
}
}
for (i = 0; i < n; i++)
{
for (j = 0; j < n; j++)
printf("%4d", a[i][j]);
cout << endl;
}
return 0;
}

THE_MASHIN
23.03.2005., 01:30
hvala mnogo!!!