Questa e' una delle soluzioni possibili
codice:
#define N 8
int mat[N][N];
int main()
{
int i=0, j=0, els=N*N, cel=1;
int st0=N, st1=N, st2=-1, st3=0;
int currDir = 0;
while(els--)
{
mat[i][j] = cel++;
switch(currDir)
{
case 0: // dx
j++;
if(j == st0)
{
i++; j--;
currDir++;
}
break;
case 1: // dn
i++;
if(i == st1)
{
i--; j--;
currDir++;
}
break;
case 2: // sz
j--;
if(j == st2)
{
i--; j++;
currDir++;
}
break;
case 3: // up
i--;
if(i == st3)
{
i++; j++;
currDir=0;
st0--; st1--;
st2++; st3++;
}
break;
}
}
printf("\n");
for(i=0; i<N; i++)
{
for(j=0; j<N; j++)
printf("%5d ", mat[i][j]);
printf("\n\n");
}
return 0;
}