디시인사이드 갤러리

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

갤러리 본문 영역

이거 푸는사람 천재

프갤러(222.111) 2024.05.18 01:41:20
조회 114 추천 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
등록순정렬 기준선택
본문 보기

하단 갤러리 리스트 영역

왼쪽 컨텐츠 영역

갤러리 리스트 영역

갤러리 리스트
번호 제목 글쓴이 작성일 조회 추천
설문 힘들게 성공한 만큼 절대 논란 안 만들 것 같은 스타는? 운영자 24/06/10 - -
2709953 군대 지금 휴일에도 전부 정상출근이래 프갤러(125.240) 06.09 33 0
2709952 나님 무병장수 위해 주말마무리 운덩 갔다올게양❤+ ♥냥덩수면과학연구소♥갤로그로 이동합니다. 06.09 25 0
2709951 30살 나는 마법사가 되었다 [2] 프갤러(118.235) 06.09 51 0
2709950 현실에서도 미소녀 등장 프갤러(121.172) 06.09 51 0
2709948 지구의 날에 전등끄는거 보다 1시간 인터넷안하는게 더도움될듯 [2] ㅇㅇ(49.142) 06.09 28 0
2709947 오늘의 챗 GPT 훈련 내용 [1] 프갤러(121.172) 06.09 82 1
2709946 나님 시작합니노✨ [4] 헬마스터갤로그로 이동합니다. 06.09 42 0
2709945 나님 시작합니당✨ ♥냥덩수면과학연구소♥갤로그로 이동합니다. 06.09 30 0
2709944 미국 패스트푸드점은 키오스크 운용하는 대신 [5] 진척갤로그로 이동합니다. 06.09 77 0
2709943 나는 중립적인 사람이야. 맞는 걸 주장할 뿐 프갤러(121.172) 06.09 35 1
2709942 동남아 개발자 비중 올라가는 게 무섭다 [4] 딱님갤로그로 이동합니다. 06.09 111 1
2709941 이력서에 다른분야 자격증도 넣어? [9] 프갤러(123.109) 06.09 100 0
2709940 챗티 잼민이 쌍으로 구라치노 ㅋ [1] 헬마스터갤로그로 이동합니다. 06.09 40 0
2709939 30살 모솔인데 인생 망한거냐? [4] 딱님갤로그로 이동합니다. 06.09 108 0
2709938 회사가서 배울 생각하지말고 [12] ㅇㅇ(211.234) 06.09 183 0
2709937 지금 회사 일이 재미도 없고, 잘 될 거 같지도 않은데 어떡하냐 딱님갤로그로 이동합니다. 06.09 29 0
2709936 액트지오에 대한 생각 [4] 프갤러(121.172) 06.09 71 1
2709935 플로우차트는 일반인들 잘 안씀?? [2] 프갤러(61.39) 06.09 38 0
2709934 학교 과제 파이썬좀 도와줄 친구있냐 [4] 허벌창갤로그로 이동합니다. 06.09 66 0
2709933 제3차세계대전준비?전세계는 군비증강중 ㅇㅇ(110.70) 06.09 20 0
2709932 커서 ide 괜찮네 ㅋㅋㅋ [7] 노럐갤로그로 이동합니다. 06.09 72 0
2709931 석열이가 확성기 다시 튼다는데 [5] 헬마스터갤로그로 이동합니다. 06.09 74 0
2709930 + 네이버 이메일 vs 지메일 [2] qu(121.171) 06.09 42 0
2709929 기계과에서 코딩 가볼까 고민하다 안갔음 [3] ㅇㅇ(211.234) 06.09 117 0
2709928 개발자 월급 68만원 경쟁자 등장 프갤러(211.234) 06.09 87 0
2709927 Rx Chat Gpt 스킨도 만들어야 되는데 프갤러(121.172) 06.09 28 1
2709923 리눅스 요새 안쓰냐? [2] 딱지(210.183) 06.09 63 0
2709922 예제코드 보기 좋은곳 없나? [1] 프갤러(121.130) 06.09 33 0
2709920 테스트코드 왜 짜냐 [1] 프갤러(39.7) 06.09 51 0
2709919 어제 글 보니까 리더들이 어쩌고 하는 댓글이 달렸다- 프갤러(121.172) 06.09 42 1
2709918 인텔리제이쓰고 gpt4쓰면 50 달라잖아 [1] 프갤러(39.7) 06.09 56 0
2709917 세계를 볼때 조센하고 역인 나라들만 조심하면됌 뒷통수한방(1.213) 06.09 22 0
2709915 나 딱님 질문 받는다 [2] 진척갤로그로 이동합니다. 06.09 43 0
2709914 형님들 [2] 프갤러(119.201) 06.09 34 0
2709913 1년정도 투자하면 취업 가능함? [9] ㅇㅇ갤로그로 이동합니다. 06.09 156 1
2709912 기득권들은 7년전에 전쟁 못일으킨것에 후회할듯 뒷통수한방(1.213) 06.09 29 0
2709911 내 대학 동기 중에 고딩 자퇴하고 검고 나온 놈 있는데 딱지(210.183) 06.09 48 0
2709908 나님.. 모든 인간이 하나가 될 방법을 찾았어.. [2] ♥냥덩수면과학연구소♥갤로그로 이동합니다. 06.09 43 0
2709906 사람뽑는 입장되니 학벌스펙 보게되네 [7] 프갤러(210.206) 06.09 147 0
2709904 언어 문법 까먹으면 니들 다시 공부함? [5] ㅇㅇ(14.38) 06.09 78 0
2709903 테스트코드 짜는 프론트 있어? 폴더구조나 파일 위치 어떻게해? [3] 프갤러(218.147) 06.09 56 0
2709900 하소연.....비전공 국비 출신 신입 취업하고 싶다. [3] 프갤러(59.16) 06.09 152 0
2709899 실력없는하드웨어틀딱새끼살처분마렵네 [2] 보법E노무현갤로그로 이동합니다. 06.09 54 0
2709898 셀레니움 data:, 이지랄로 뜨는건 뭐가 문제입니노 [2] 프갤러(118.235) 06.09 34 0
2709897 샤딩하면 성능 잘나오는데 왜 싱글에선 안나오는지 모르겠네 [1] 프갤러(118.46) 06.09 49 0
2709896 일 잘하는 못생긴여자 vs 일 못하는 예쁜여자 [2] 프갤러(211.234) 06.09 50 0
2709895 진짜 개발자 말고 그냥 너무 미래없는거만아니면 IT직무 아무거나 프갤러(112.150) 06.09 58 0
2709894 프리는 인맥이 답이네 [2] 클갤(39.7) 06.09 76 1
2709893 인생은 노력임 ㅋ 뒤통수한방(1.213) 06.09 24 0
2709892 요즘 몸이 너무 무겁네요 [5] 헬마스터갤로그로 이동합니다. 06.09 55 0
갤러리 내부 검색
제목+내용게시물 정렬 옵션

오른쪽 컨텐츠 영역

실시간 베스트

1/8

뉴스

디시미디어

디시이슈

1/2