디시인사이드 갤러리

갤러리 이슈박스, 최근방문 갤러리

갤러리 본문 영역

이거 푸는사람 천재

프갤러(222.111) 2024.05.18 01:41:20
조회 148 추천 0 댓글 1


#include <stdio.h>
#include <stdlib.h>
#define MAX_VERTICES 10

#define SWAP(x, y, t) ((t) = (x), (x) = (y), (y) = (t))

typedef struct GraphNode
{
    int vertex;
    struct GraphNode *link;
} GraphNode;

typedef struct GraphType
{
    int n; // 정점의 개수
    GraphNode *adj_list[MAX_VERTICES];
} GraphType;

// 그래프 초기화
void graph_init(GraphType *g)
{
    int v;
    g->n = 0;
    for (v = 0; v < MAX_VERTICES; v++)
        g->adj_list[v] = NULL;
}
// 정점 삽입 연산
void insert_vertex(GraphType *g, int v)
{
    if (((g->n) + 1) > MAX_VERTICES)
    {
        fprintf(stderr, "그래프: 정점의 개수 초과");
        return;
    }
    g->n++;
}
// 간선 삽입 연산, v를 u의 인접 리스트에 삽입한다.
void insert_edge(GraphType *g, int u, int v)
{
    GraphNode *node;
    if (u >= g->n || v >= g->n)
    {
        fprintf(stderr, "그래프: 정점 번호 오류");
        return;
    }
    node = (GraphNode *)malloc(sizeof(GraphNode));
    node->vertex = v;
    node->link = g->adj_list[u];
    g->adj_list[u] = node;
}

GraphType g;
void print_arr(int arr[], int in[], int s, int i, int size)
{
    for (int j = 0; j < g.n; j++)
        printf("%3d", in[j]);
    printf("\n");
    for (int j = 0; j < g.n; j++)
        printf("%3d", arr[j]);
    printf("  - s:%d, i:%d, size:%d\n", s, i, size);
}
void generate(int arr[], int s, int size, int *in)
{
    int i, tmp;
    int in_degree[MAX_VERTICES] = {0};
    for (i = 0; i < g.n; i++) // copy
        in_degree[i] = in[i];

    GraphNode *node = g.adj_list[arr[s]]; // 각 정점의 진입 차수를 변경
    while (node != NULL)
    {
        in_degree[node->vertex]--;
        node = node->link;
    }

    s++;
    if (s == g.n)
    {
        for (i = 0; i < g.n; i++)
            printf("정점%d->", arr[i]);
        printf("\n");
    }
    else
    {
        for (i = s; i < size; i++)
        {
            if (in_degree[arr[i]] == 0)
            {
                SWAP(arr[s], arr[i], tmp);
                generate(arr, s, size, in_degree);
                SWAP(arr[s], arr[i], tmp);
            }
        }
    }
}
// 위상정렬을 수행한다.
void topo_sort()
{
    int i, tmp;
    int arr[MAX_VERTICES], size;
    int in_degree[MAX_VERTICES];

    // 모든 정점의 진입 차수를 계산
    for (i = 0; i < g.n; i++) // 초기화
        in_degree[i] = 0;
    for (i = 0; i < g.n; i++)
    {
        GraphNode *node = g.adj_list[i]; // 정점 i에서 나오는 간선들
        while (node != NULL)
        {
            in_degree[node->vertex]++;
            node = node->link;
        }
    }
    // 진입 차수가 0인 정점을 배열에 삽입
    size = 0;
    for (i = 0; i < g.n; i++)
    {
        if (in_degree[i] == 0)
            arr[size++] = i;
    }
    // 모든 위상 순서를 생성
    for (i = 0; i < size; i++)
    {
        generate(arr, i, size, in_degree);
    }
}

int main(void)
{
    graph_init(&g);
    // 문제에 주어진 그래프에 대한 인접리스트를 완성하시오.
    insert_vertex(&g, 0);
    insert_vertex(&g, 1);
    insert_vertex(&g, 2);
    insert_vertex(&g, 3);
    insert_vertex(&g, 4);
    insert_vertex(&g, 5);

    // 정점 0의 인접 리스트 생성
    insert_edge(&g, 0, 2);
    insert_edge(&g, 0, 3);

    // 정점 1의 인접 리스트 생성
    insert_edge(&g, 1, 3);
    insert_edge(&g, 1, 4);

    // 정점 2의 인접 리스트 생성
    insert_edge(&g, 2, 3);
    insert_edge(&g, 2, 5);

    // 정점 3의 인접 리스트 생성
    insert_edge(&g, 3, 5);

    // 정점 4의 인접 리스트 생성
    insert_edge(&g, 4, 5);

    // 위상 정렬
    topo_sort();
    // 동적 메모리 반환 코드 생략
    return 0;
}
/*실제출력

*/
/*출력예시
정점0->정점1->정점2->정점4->정점3->정점5->
정점0->정점1->정점2->정점3->정점4->정점5->
정점0->정점1->정점4->정점2->정점3->정점5->
정점0->정점2->정점1->정점4->정점3->정점5->
정점0->정점2->정점1->정점3->정점4->정점5->
정점1->정점0->정점4->정점2->정점3->정점5->
정점1->정점0->정점2->정점4->정점3->정점5->
정점1->정점0->정점2->정점3->정점4->정점5->
정점1->정점4->정점0->정점2->정점3->정점5->
계속하려면 아무 키나 누르십시오 . . .
*/


아무리 생각해도 안됨 

추천 비추천

0

고정닉 0

0

댓글 영역

전체 댓글 0
본문 보기

하단 갤러리 리스트 영역

왼쪽 컨텐츠 영역

갤러리 리스트 영역

갤러리 리스트
번호 제목 글쓴이 작성일 조회 추천
설문 끝까지 다 본 걸 후회하게 만든 용두사미 드라마는? 운영자 25/07/07 - -
AD 디지털 액세서리 기간한정 세일! 운영자 25/07/11 - -
2870247 시노자키 아이 근황 발명도둑잡기(118.216) 07.06 105 0
2870244 ‘극과극’ 수지의 ‘공항→파리’ 온도차 패션 발명도둑잡기(118.216) 07.06 62 0
2870243 윈도우 블로스크린 블랙스크린으로 바꾸는거 인종차별 아닌가 [1] 발명도둑잡기(118.216) 07.06 57 0
2870242 똥양인70억인구가 그나마 잘하는거 뒷통수한방(1.213) 07.06 48 0
2870240 솔직히 좇센만큼 살기좋은 나라 어딨냐??ㅋㅋ 뒷통수한방(1.213) 07.06 42 0
2870235 러스트해봤자 좇센 닭장 바퀴벌레만한곳도 못들어갈텐데 뒷통수한방(1.213) 07.06 50 1
2870234 아 진짜 힘들다 [1] 아스카영원히사랑해갤로그로 이동합니다. 07.06 82 1
2870232 이준석 의원 님 생각하고 위성항법장치GPS 관성항법장치INS Think 넥도리아(112.170) 07.06 60 0
2870230 인터넷 개돼지 소굴 프갤러(112.171) 07.06 39 1
2870229 이상State로 프갤 해봤어 넥도리아(112.170) 07.06 37 0
2870226 욕심많은 늙은년 하나 때문에 ㅈ망했네시발련 프갤러(218.232) 07.06 62 1
2870225 나 프로그램 있다니까요. 복구프로그램 윈도우가 세션이 없네용 [3] 넥도리아(112.170) 07.06 51 0
2870224 아 짜증나 액정플라스틱하고 액정을 붙여주는 기계가 6만원 이상 넥도리아(112.170) 07.06 45 0
2870223 재명에 못 산다. 휴대폰을 하루에 1번 고쳐서 나간다. 충전이 안될때면, 넥도리아(112.170) 07.06 55 0
2870222 디시를 4번째로 나를 억까하구나 넥도리아(112.170) 07.06 33 0
2870220 공예 마트가서 열풍기 사는게 우선과제 넥도리아(112.170) 07.06 40 0
2870219 바이오스 롬이 두 개인가 어느순간 영문 어느순간 한글 넥도리아(112.170) 07.06 28 0
2870216 민생소비 쿠폰 다들 정하심? 넥도리아(112.170) 07.06 63 0
2870212 일본 게임의 거장 KOEI에 대하여 발명도둑잡기(118.216) 07.06 43 0
2870210 바둑과 교도소 발명도둑잡기(118.216) 07.06 47 0
2870208 똑똑한 사람들 부럽더라 발명도둑잡기(118.216) 07.06 44 0
2870207 요즘 AI 기술 수준 ㄷㄷ 발명도둑잡기(118.216) 07.06 50 0
2870205 오늘은 납골공원에서 장기좀 두시는구나 [2] 헬마스터갤로그로 이동합니다. 07.06 50 0
2870204 냥덩이 면상 공개 발명도둑잡기(118.216) 07.06 51 0
2870201 나무늘보 다큐멘터리 발명도둑잡기(118.216) 07.06 40 0
2870199 일본 2029년까지 최저시급 1500엔 목표. 참의원선거 관심 up 프갤러(183.101) 07.06 39 0
2870197 일본, 먹고살기힘들다 최저시급 1500엔 인상 주장 프갤러(183.101) 07.06 43 0
2870196 케이장녀 발명도둑잡기(118.216) 07.06 63 0
2870192 메인 함수 찾음 루도그담당(211.235) 07.06 50 0
2870190 국비신입 쎄하다 [12] 프갤러(61.75) 07.06 219 4
2870186 파이썬, 자바, 코틀린 같은 기능 하는 좀 긴 코드 일이 비교 발명도둑잡기(118.216) 07.06 65 0
2870185 빨리 창업을 성공해야하는데 쉽지 않다 지금 상태가 너무 불안정해 [3] ㅆㅇㅆ(124.216) 07.06 71 1
2870183 같은 기능 코드 길이 비교 [1] 발명도둑잡기(118.216) 07.06 68 0
2870182 fnirsi dso510 오실로스코프 샀다 [1] 발명도둑잡기(118.216) 07.06 53 0
2870181 한국 지하철 특징 발명도둑잡기(118.216) 07.06 44 0
2870180 회사 내 실수 운전면허같이 벌점제 장단점 발명도둑잡기(118.216) 07.06 48 0
2870179 라즈베리필드-토요일 오후에 발명도둑잡기(118.216) 07.06 29 0
2870178 민주당이 또 부동산 폭등시키면 거기서 극우세력이 커진다 발명도둑잡기(118.216) 07.06 47 0
2870177 충주시 티셔츠 안 만드는 이유 발명도둑잡기(118.216) 07.06 34 0
2870174 양자컴퓨터로 미시세계에서 시간 과거로 역전 [1] 발명도둑잡기(118.216) 07.06 48 0
2870172 혹시 AI쪽 전문적으로 배울수있는 곳이 있을까여 [2] ㅇㅇ(14.38) 07.06 83 0
2870171 성수동 오니까 분내 존나 풍기노 [1] 아스카영원히사랑해갤로그로 이동합니다. 07.06 92 0
2870165 실베 글 보니 어제 썼던 글 생각이 난다 발명도둑잡기(118.216) 07.06 50 0
2870163 이상하네 [10] 루도그담당(58.239) 07.06 107 0
2870161 충격적인 브라질 빈민가의 먹거리 발명도둑잡기(118.216) 07.06 36 0
2870158 타인은 지옥이다 이씨발..진짜 [4] 프갤러(218.232) 07.06 86 0
2870156 학점 2점대면 걍 공기업 준비하는게 나은가 프갤러(118.235) 07.06 49 0
2870155 고교 학점제 상대평가 때문에 문제 발명도둑잡기(118.216) 07.06 40 0
2870153 너네는 근데 트렌드 어떻게 파악하냐 [4] ㅆㅇㅆ(124.216) 07.06 98 0
2870152 개발자면 맥북 필수지 [2] 뒷통수한방(1.213) 07.06 99 0
뉴스 나는 솔로 16기 영숙, 상철에 대한 허위사실 유포 명예훼손으로 벌금형 선고...음란 메시지, 패드립 공개 디시트렌드 07.10
갤러리 내부 검색
제목+내용게시물 정렬 옵션

오른쪽 컨텐츠 영역

실시간 베스트

1/8

뉴스

디시미디어

디시이슈

1/2