#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);
dkfwl24 7년 전
모든 테스트 케이스가 다 맞는 것 같은데
왜 안되는지 모르겠습니다. 오늘 하루종일 하네요.
큐를 이용하지는 않았는데 답은 잘 나오거든요.
도와주세요 고수님들 ㅠㅠ
#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;
}