4_ 고소한 알고리즘
C- ACM - 지뢰찾기
준환이형님_
2010. 6. 23. 14:16
지뢰찾기 게임을 구현합니다~ 지뢰위치는 '*'로 나타내고 그렇지 않다면 주변 8 방향의 지뢰매설 개수를 표시합니다.
저는 배열이 좋은데.. 이번에는 동적으로 구현 해 보았어요. 이렇게 하면 평당 얼마의 메모리 비용으로 저렴하게 지뢰밭을 만들 수 있겠죠~ㅋ
내용은 for문에 따라 [동적배열생성]->[지뢰생성]->[표시]->[메모리해제] 순서입니다. 지뢰 찾으러 갑시당~♪
#include#include #include #include int main(void) { srand((unsigned int)time(NULL)); //랜덤seed설정 int N,M,counter; int **mine_farm; scanf("%d %d", &N, &M); N+=2;M+=2; // 마스크로 인해 끝부분이 두칸씩 잘리게 되므로 처음부터 두칸 넓게 잡음 mine_farm=(int**)malloc(N*sizeof(int)); // 동적배열(행) for(int i=0; i<N; i++) { *(mine_farm+i)=(int*)malloc(sizeof(int)*M); // 동적배력(열) } for(int i=0; i<N; i++) { for(int j=0; j<M; j++) { if(i==0 || j==0 || i==N-1 || j==M-1){continue;} //마스크는 패스 if(rand()%4){mine_farm[i][j]=NULL;}else mine_farm[i][j]=1; // 1/4확률의 지뢰생성 } } for(int i=0; i<N; i++) { for(int j=0; j<M; j++) { if(i==0 || j==0 || i==N-1 || j==M-1){continue;} if(mine_farm[i][j]==1){printf("* ");continue;} // 지뢰를 "*"표시 counter=NULL; for(int l=-1; l<2; l++) { for(int m=-1; m<2; m++) { if(mine_farm[i+l][j+m]==1){counter++;} //마스크내의 *은 카운터를 셈 } } if(i==0 || j==0 || i==N-1 || j==M-1){continue;} printf("%d ",counter); // 나머지는 숫자표현 } printf("\n"); } for(int i=0; i<N; i++) { free(mine_farm[i]); // 메모리해제 } free(mine_farm); return 0; }