블로그 이미지
shadowchaser
이곳 저곳 이것 저것

calendar

1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30

Notice

2016. 3. 20. 20:11 Algorithm/BFS

토마토 (고)


#include <stdio.h>

#include <stdlib.h>


int M, N;

int map[1000][1000];


typedef struct {

int row;

int col;

int day;

} _COORDI;

int head = 0, tail = 0;

_COORDI point[1000000];


int Dy[4] = { -1,1,0,0 };

int Dx[4] = { 0,0,-1,1 };

int min = 0;


int bfs(int row, int col)

{

int i;

int row_t, col_t;


while (1)

{

if (head == tail) break;

for (i = 0; i < 4; i++)

{

row_t = point[head].row + Dy[i];

col_t = point[head].col + Dx[i];

if (row_t >= 0 && row_t < N && col_t >= 0 && col_t < M)

{

if (map[row_t][col_t] == 0)

{

map[row_t][col_t] = 1;

point[tail].row = row_t;

point[tail].col = col_t;

point[tail].day = point[head].day + 1;

tail++;

}

}

}

head++;

}


return point[head - 1].day;

}


int main(int argv, char** argc) {

freopen("input.txt", "r", stdin);

setbuf(stdout, NULL);

scanf("%d %d", &M, &N);

for (int i = 0; i < N; i++)

{

for (int j = 0; j < M; j++)

{

scanf("%d", &map[i][j]);

if (map[i][j] == 1)

{

point[tail].row = i;

point[tail].col = j;

point[tail].day = 0;

tail++;

}

}

}


if (tail == 0)

{

printf("-1\n");

return 0;

}


if (tail == M * N)

{

printf("0\n");

return 0;

}


min = bfs(0, 0);

int find = 0;


for (int i = 0; i < N; i++)

{

for (int j = 0; j < M; j++)

{

if (map[i][j] == 0)

{

find = 1;

break;

}

}

}

if (find == 1)

{

printf("-1\n");

}

else

{

printf("%d\n", min);

}

return 0;//정상종료시 반드시 0을 리턴해야합니다.

}



'Algorithm > BFS' 카테고리의 다른 글

정올 등산로 찾기  (0) 2016.06.17
정올 저글링 방사능 오염  (0) 2016.06.15
정올 보물섬  (0) 2016.05.21
정올 장기  (0) 2016.05.09
정올 치즈 BFS  (0) 2016.04.04
posted by shadowchaser