본문 바로가기

Algorithm

지그재그 알고리즘(반복문, 배열)


/**********************************************************************************
*                                                                                                                          *
*    제  목 : 지그재그 알고리즘                                                                                  *
*    작성자 : 배기만                                                                                                 *
*    날  짜 : 2009. 7. 23                                                                                            * 
*    방  법 : 배열의 최대가 5일때                                                                               *
*             1    3    4   10   11                                                                                    *
*             2    5    9   12   19                                                                                    *
*             6    8   13   18   20                                                                                   *
*             7   14   17   21   24                                                                                   *
*            15   16   22   23   25                                                                                   *
*            이런식으로 나타나도록 함                                                                           *
*                                                                                                                         *
**********************************************************************************/

#include<stdio.h>
#define MAX 5

void main()
{
 int array[MAX][MAX] = {0,}; // 지그재그 값 넣는 배열
 int max_num = 0; // 초기값 지정
 int count = 1; // 지그재그 값
 int temp = 0; // 배열 값 바꾸기
 int num = 0; // 각 반복에서의 최대값
 int i = 0;
 int j = 0;
 int count_max = MAX * 2; // 총 반복 횟수


 
 
 while(i < count_max)
 {
  
  j = max_num; // 반복의 초기값 지정
  
  while(j <= num)
  {
   if((i % 2) == 0)
   {
    array[j][num - temp] = count;
   }
   else
   {
    array[num - temp][j] = count;
   }

   count++;
   temp++;
   j++;
  }
  i++;
  temp = 0;

  if(i >= MAX)
  {
   num = MAX - 1;
   max_num++;
  }
  else
  {
   num++;
  }
 }

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