Spiral array

3 отговора 232 прегледа
#1

Spiral array

Help ....
Правя едно масивче :
Ама съм отвикнал да мисля с главата си и така го мажа и цапам, че ме е
срам да Ви го покажа.
за n=4
-----------------
1 2 3 4
12 13 14 5
11 16 15 6
10 9 8 7
-----------------
Кажте някои по-тарикатски начин за спираловидна инициализация !

МЕРСИ >>>>

Отговор
в отговор на LamerSlamer #2

Re: Spiral array

neka imame masiv A [1..x,1..y]
neka v nachaloto vsichki elementi v nego = 0

xi=1
yi=1

function check (x,y) boolean
if (x>xi) or (x<1) or (y>yi) or (y<1) then
check=false
else
check=(A [x,y]=0)
end if
end function

repeat
if check (x+1,y) then
x=x+1
else
if check (x,y+1) then
y=y+1
else
if check (x-1,y) then
x=x-1
else
if check (x,y-1) then
y=y-1
end if
end if
end if
end if
until not check (x,y)

moze da ne e suvsem tocho, ama v text vid zvuchi taka:
opitvame se da se premestim v slednata posledovatelnos:
1. naliavo
2. nadolu
3. nazad
4. nagore
i taka dokato mozem

ako neshto e neiasno ili netochno, shte se pomucha da buda po-tochen
polzvan e psevdokod, ama e lesno da se prevede na koi da e ezik

чети и дишай по-леко
Отговор
в отговор на Pechenia #3

Re: Spiral array

Ti si Geniii ! ! !

Mersi ....

Отговор
в отговор на LamerSlamer #4

Ето ти C - версия.

Стана ми интересно и го написах.

void FillSpiral( int *arr, int N, int Value )
{
int I;
int Step = N;

while( N > 1 )
{
N--;
for( I = 0; I < N ; I++ )
{
*arr = Value++;
arr++;
}
for( I = 0; I < N; I++ )
{
*arr = Value++;
arr += Step;
}
for( I = 0; I < N; I++ )
{
*arr = Value++;
arr--;
}
for( I = 0; I < N; I++ )
{
*arr = Value++;
arr -= Step;
}
arr += Step+1;
N--;
}
if( N == 1 )
*arr = Value++;
}


Вика се:

const int N = 4;
int a[N][N];

FillSpiral(a[0], N, 1 );

Отговор