boj 11725

https://www.acmicpc.net/problem/11725

#include <stdio.h>

int main(){

    int n,c=1;

    scanf("%d",&n);

    char cnt[n+1][n+1],grade[n+1][n+1],visited[n+1];

    for(int q=1;q<=n;q++){for(int w=1;w<=n;w++)cnt[q][w]=grade[q][w]=0;visited[q]=0;}

    for(int t=1;t<n;t++){

        int a,b;

        scanf("%d %d",&a,&b);

        cnt[a][b]=cnt[b][a]=1;

    }

    grade[1][1]=1;

    visited[1]=1;

    /*{

    for(int q=1;q<=n;q++){for(int w=1;w<=n;w++)printf("%d ",cnt[q][w]);printf("\n");}

    printf("\n");

    for(int q=1;q<=n;q++){for(int w=1;w<=n;w++)printf("%d ",grade[q][w]);printf("\n");}

    printf("\n");

    for(int q=1;q<=n;q++)printf("%d ",visited[q]);printf("\n");

    printf("\n");

    }*/

    for(int q=1;q<=n;q++){

        for(int w=1;w<=n;w++)if(grade[q][w]>0){

            for(int e=1;e<=n;e++){

                if(cnt[w][e]==1&&visited[e]==0){visited[e]=q+1;grade[q+1][e]=w;c++;}

                if(c==n)break;

            }

            if(c==n)break;

        }

        if(c==n)break;

        /*{

        for(int q=1;q<=n;q++){for(int w=1;w<=n;w++)printf("%d ",grade[q][w]);printf("\n");}

        printf("\n");

        for(int q=1;q<=n;q++)printf("%d ",visited[q]);printf("\n");

        printf("\n");

        }*/

    }

    /*{

    for(int q=1;q<=n;q++){for(int w=1;w<=n;w++)printf("%d ",grade[q][w]);printf("\n");}

    printf("\n");

    for(int q=1;q<=n;q++)printf("%d ",visited[q]);printf("\n");

    printf("\n");

    }*/

    for(int t=2;t<=n;t++)printf("%d\n",grade[visited[t]][t]);

    return 0;

}

이렇게 코드 짜서 코드 잘 돌아가고 예제 넣어봤을 때 결과값도 이상없는데 제출하면 segfault가 뜨는데 이유가 뭘까요