컴파일 에러는 눌르면 뭐 에런지 뜨던데


런타임 에러는 눌려지지도 않고 뭘까요


VS에선 워닝도 없이 잘 돌아가는데 백준에 답 제출하니깐


런타임 에러뜨네요


C에요! 런타임 에러가 뭐지 잘 모르겠는데 설명 해주시면 감사드릴게요!


코드는 긴데 요로케요!


#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
#define MAX_SIZE 50
#define MAX_TEST 20
int tc = 0; //테스트 케이스 갯수
typedef struct vertex { //그래프 정점
int x;
int y;
} vertex;
typedef struct graph {
vertex v[MAX_SIZE];
int edge[MAX_SIZE][MAX_SIZE];
} graph;
typedef struct map_data { //지도의 데이터
int h;
int w;
int arr[MAX_SIZE][MAX_SIZE];
} map_data;
int node_num[MAX_TEST] = { 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 }; //노드 최대 갯수
int visited[MAX_TEST][MAX_SIZE*MAX_SIZE];
void add_node(graph *g, int test_num, int w, int h);
void add_edge(int test_num, graph *g, int num);
void dfs_map(int test_num, graph *g, int num); // 깊이 우선 탐색
void print_land(int test_num, graph *g);
int main()
{
int i,j,k;
graph g[MAX_TEST];
map_data map[MAX_TEST]; //지도의 데이터
while (1) //입력받는 부분
{
scanf("%d %d", &map[tc].w, &map[tc].h);
if (map[tc].w == 0 && map[tc].h == 0)
break;
for (i = 0; i < map[tc].h; i++)
{
for (j = 0; j < map[tc].w; j++)
{
scanf("%d", &map[tc].arr[i][j]);
}
}
tc++;
}
for (k = 0; k < tc; k++)
{
for (i = 0; i < map[k].h; i++)
{
for (j = 0; j < map[k].w; j++)
{
if (map[k].arr[i][j] == 1) //is land, 정점에 추가 및 간선 업데이트
{
add_node(g, k, j, i); //정점 추가
add_edge(k, g, node_num[k]-1); //간선 추가(초기화)
}
}
}
}
for (k = 0; k < tc; k++) // visited 배열 초기화
{
for (i = 0; i < node_num[k]; i++)
{
visited[k][i] = 0;
}
}
for (k = 0; k < tc; k++) // 섬 갯수 출력
{
print_land(k, g);
}
return;
}
void add_node(graph *g,int test_num, int w, int h)
{
g[test_num].v[node_num[test_num]].x = w;
g[test_num].v[node_num[test_num]].y = h;
node_num[test_num]++;
}
void add_edge(int test_num, graph *g, int num)
{
int i;
g[test_num].edge[num][num] = 0;
if (num == 0)
return;
for (i = 1; num - i >= 0; i++)
{
if (g[test_num].v[num].x - g[test_num].v[num-i].x <= 1 && g[test_num].v[num].x - g[test_num].v[num - i].x >= -1
&& g[test_num].v[num].y - g[test_num].v[num - i].y <= 1 && g[test_num].v[num].y - g[test_num].v[num - i].y >= -1)
{
g[test_num].edge[num][num-i] = 1;
g[test_num].edge[num-i][num] = 1;
}
else
{
g[test_num].edge[num][num - i] = 0;
g[test_num].edge[num - i][num] = 0;
}
}
}
void dfs_map(int test_num, graph *g, int num) // 깊이 우선 탐색
{
int w;
visited[test_num][num] = 1;
for (w = 0; w < node_num[test_num]; w++)
{
if (g[test_num].edge[w][num] && visited[test_num][w]==0)
dfs_map(test_num, g, w);
}
}
void print_land(int test_num, graph *g)
{
int i;
int count = 0;
for (i = 0; i < node_num[test_num]; i++)
{
if (!visited[test_num][i])
{
count++;
dfs_map(test_num, g, i);
}
}
printf("%d\n", count);
}