카테고리 없음
[C++] 달팽이 배열 만들기
s뽈록이s
2013. 9. 23. 10:40
#define xx 4 #define yy 5 void main() { int arr[yy][xx] = {0}; int su = 1, to[2] = {0}; int cnt; int x = 0, y = 0; for(cnt = 0; cnt < (xx * yy); cnt++) { arr[y][x] = cnt + 1; if((to[0] == 0) && (to[1] == 0)) // x방향 증가 { x++; if((x == xx) || (arr[y][x] != 0)) { x--; cnt--; to[0] = 1; to[1] = 0; } } else if((to[0] == 1) && (to[1] == 0)) // y방향 증가 { y++; if((y == yy) || (arr[y][x] != 0)) { y--; cnt--; to[0] = 0; to[1] = 1; } } else if((to[0] == 0) && (to[1] == 1)) // x방향 감소 { x--; if((x == -1) || (arr[y][x] != 0)) { x++; y--; to[0] = 1; to[1] = 1; } } else if((to[0] == 1) && (to[1] == 1)) // y방향 감소 { y--; if(arr[y][x] != 0) { y++; x++; to[0] = 0; to[1] = 0; } } } for(cnt = 0; cnt < (xx * yy); cnt++) { x = cnt % xx; y = cnt / xx; if(((cnt % xx) == 0) && (cnt != 0))cout << endl; cout << arr[y][x] << "\t"; } cout << endl; }
프로그램 실행화면
달팽이 배열을 만들어주는 프로그램이다. #define xx, yy를 통해 배열의 크기를 조절해 줄 수 있다. 알고리즘은 사람이 그려나가는 것과 비슷하다.
오른쪽으로 이동 하다가 벽을 만나면 밑으로 가고 또 벽을 만나면 왼쪽으로 벽으 만나면 위쪽으로 그리고 또 벽을 만나면 오른쪽으로 증가한다. 이를 xx * yy번 반복하면 된다.
더 효율적인 알고리즘이 있는지는 모르겠지만 내 알고리즘은 이렇다. 배열의 크기도 지정해 줄 수 있어 유연한 프로그램이라 생각된다.