152번 문제요...

  • Chaos.PP
    Chaos.PP

    위상정렬을 이용해서 제가 문제를 풀었는데 계속 WA가 나와서 답답해서 질문 올립니당...
    문제에 있는 예제도 해보고, 제가 나름대로 작성한 테스트 문제도 만들어서 작성해봤지만 계속 WA나오네요
    제가 작성한 소스 올립니다.. 허접하지만 누가 문제점좀 찾아내 주세요 ㅠ.ㅠ
    #include
    #include
    #define WHITE 5
    #define GRAY 6
    #define BLACK 7
    #define CHECKED 3
    #define UNCHECKED 4
    #define TRUE 1
    #define FALSE 0
    #define MAX 1000000
    int time;
    typedef struct node {
    char job;
    int color;
    int d;
    int f;
    node *pre;
    node *next;
    node *t_next;
    } node;
    void make_graph(node *head, char num1, char num2)
    {
    node *t, *r, *temp;
    temp = (node *)malloc(sizeof(node));
    temp->job = num2;
    temp->color = WHITE;
    temp->d = MAX;
    temp->f = MAX;
    temp->pre = NULL;
    temp->next = NULL;
    if(head[num1].next == NULL)
    head[num1].next = temp;
    else {
    t = head[num1].next;
    r = &head[num1];
    while((t != NULL) && (t->job < num2)) {
    r = t;
    t = t->next;
    }
    r->next = temp;
    temp->next = t;
    }
    }
    void DFS_VISIT(node *head, node **thead, int i)
    {
    node *temp;
    head[i].color = GRAY;
    time = time + 1;
    head[i].d = time;
    temp = &head[i];
    while(temp->next != NULL) {
    temp = temp->next;
    if(head[temp->job].color == WHITE) {
    head[temp->job].pre = &head[i];
    DFS_VISIT(head, thead, temp->job);
    }
    }
    head[i].color = BLACK;
    time = time + 1;
    head[i].f = time;
    head[i].t_next = *thead;
    *thead = &head[i];
    }
    void DFS(node *head, node **thead, int number_of_vertex)
    {
    int i;
    time = 0;
    for(i=number_of_vertex; i>0; i--) {
    if(head[i-1].color == WHITE) {
    DFS_VISIT(head, thead, i-1);
    }
    }
    }
    int main()
    {
    char job[100];
    int T, N, M, i, j;
    node *head, *thead, *t;
    scanf("%d", &T);
    getchar();
    for(i=0; i scanf("%d %d", &N, &M);
    getchar();
    head = (node *)malloc(sizeof(node)*N);
    thead = NULL;
    for(j=0; j head[j].job = 'A' + j;
    head[j].color = WHITE;
    head[j].d = MAX;
    head[j].f = UNCHECKED;
    head[j].next = NULL;
    head[j].pre = NULL;
    }
    for(j=0; j scanf("%s", job);
    getchar();
    make_graph(head, job[0]-'A', job[1]-'A');
    }
    DFS(head, &thead, N);
    t = thead;
    j=0;
    while(t != NULL) {
    job[j] = t->job;
    t = t->t_next;
    j++;
    }
    job[j] = '\0';
    printf("%s\n", job);
    free(head);
    }
    return 0;
    }

    [이 글은 과거 홈페이지에서 이전된 글입니다. 원문보기]

    14년 전
2개의 댓글이 있습니다.
  • MiNu
    MiNu

    아래 케이스를 입력해 보세요
    4 3
    AC
    DC
    DB


    14년 전 link
  • Chaos.PP
    Chaos.PP

    아... 감사합니다~ ^^
    지적해 주신 케이스 해결했는데요 그래도 안되는군요 -.-;;;
    좀 더 생각해 봐야 할 것 같습니다.. 거의다 푼거 같은데 ㄷㄷ


    14년 전 link
  • 정회원 권한이 있어야 커멘트를 다실 수 있습니다. 정회원이 되시려면 온라인 저지에서 5문제 이상을 푸시고, 가입 후 7일 이상이 지나셔야 합니다. 현재 문제를 푸셨습니다.