dkfwl24   4년 전

모든 테스트 케이스가 다 맞는 것 같은데

왜 안되는지 모르겠습니다. 오늘 하루종일 하네요.

큐를 이용하지는 않았는데 답은 잘 나오거든요.

도와주세요 고수님들 ㅠㅠ


#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define MAX 1001
int m=0, n=0, cnt=0;
int arr[MAX][MAX];
int Function(int (*arr)[MAX]);
void Check(int (*arr2)[MAX], int a, int b);
int IsEnded(int (*arr)[MAX]);

int main(){
        int isChanged=0, allZero=1, k;
scanf("%d %d", &m, &n);
    
for(int i=0; i<n; i++)
{
for(int j=0; j<m; j++)
{
scanf("%d", &k);
arr[i][j] = k;
if(k==1) allZero = 0;
}
}

if(allZero == 1)
{
        printf("-1");
return 1;
}

while(1)
{
isChanged = Function(arr);
if(isChanged == 0)
{
if(IsEnded(arr)==1) // 0이 없는지 확인 = 모두 익은 상태
{
printf("%d", cnt);
break;
}
else
{
printf("-1"); // 토마토가 모두 익지는 못하는 상황
break;
}
}
}

    return 0;
}

int Function(int (*arr)[MAX])
{
for(int i=0; i<n; i++)
{
for(int j=0; j<m; j++)
{
if(arr[i][j] == 1)
{
Check(arr, i, j);
}
}
}

int isChanged=0;
for(int i=0; i<n; i++)
{
for(int j=0; j<m; j++)
{
if(arr[i][j] == 2)
{
arr[i][j] = 1;
isChanged = 1;
}
}
}

if(isChanged==1) cnt++;
return isChanged;
}

void Check(int (*arr2)[MAX], int a, int b)
{
if(a-1 >= 0 && arr2[a-1][b] == 0) arr2[a-1][b] = 2;
if(a+1 < m && arr2[a+1][b] == 0) arr2[a+1][b] = 2;
if((b-1 >= 0) && (arr2[a][b-1] == 0)) arr2[a][b-1] = 2;
if(b+1 < m && arr2[a][b+1] == 0) arr2[a][b+1] = 2;
}

int IsEnded(int (*arr)[MAX])
{
for(int i=0; i<n; i++)
{
for(int j=0; j<m; j++)
{
if(arr[i][j] == 0)
{
return 0;
}
}
}

return 1;
}

댓글을 작성하려면 로그인해야 합니다.