#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#define SIZE 100

//1419번, 배열 채우기 III, 시계방향 달팽이모양으로 채우기. 방향을 0, 1, 2, 3으로 하고, 방향을 바꾸는걸 함수로 넣어놓고 (0->1, 3->0), 100100을 0으로 초기화, 처음 입력받은 사각형대로 1으로 초기화한다음에, 만약 방향대로의 다음 칸이 0이면 방향을 바꾸는 걸로 하자. 재귀함수면 될거같다.

void snail(int (*a)[SIZE], int *dir, int *num, int n, int *i, int *j);

void transparention(int *dir);



int main()

{

 int a[SIZE][SIZE] = { 0 };

 int num, dir, n, i, j;

 scanf("%d", &n);

 for (j = 0; j < n; j++)
 for (i = 0; i < n; i++)

   a[j][i] = 1;


 for (j = 0; j < n; j++)
 {
  for (i = 0; i < n; i++)
   printf("%d ", a[j][i]);
  printf("\n");
 }


 a[0][0] = 5;

 i = 1;
 j = 0;
 num = 2;
 dir = 0;


 snail(a, &dir, &num, n, &i, &j);

 a[0][0] = 1;


 for (j = 0; j < n; j++)
 {
  for (i = 0; i < n; i++)
   printf("%d ", a[j][i]);
  printf("\n");
 }


 return 0;

}

void snail(int (*a)[SIZE], int *dir, int *num, int n, int *i, int *j)

{

 a[*j][*i] = *num;

 (*num) += 1;


 if ((*dir == 0) && (a[*j][(*i + 1)] != 1) ||
  (*dir == 1) && (a[(*j + 1)][*i] != 1) ||
  (*dir == 2) && (a[*j][(*i - 1)] != 1) ||
  (*dir == 3) && (a[(*j - 1)][*i] != 1))
  transparention(dir);



 switch (*dir)
 {

 case 0:

  (*i)++;

  break;

 case 1:

  (*j)++;

  break;

 case 2:

  (*i)--;

  break;

 case 3:

  (*j)--;

  break;

 default:

  printf("switch에서 오류가낫구나n");

  break;

 }

 if((*num )<= n*n) snail(a, dir, num, n, i, j);

}

void transparention(int *dir)
{
 *dir += 1;


 if (*dir == 4)
  *dir = 0;

}

// 졷도 모르고 포인터로 태클걸어서 미안하다..

// * 이거 겁나 많으니까 헷갈린다

// 보고 어디다른지 확인해보길 바람