Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- typedef struct
- {
- int index;
- // 위치
- int distance;
- // 가중치
- struct Node *next;
- // 연결리스트 다음 노드를 가르키는 값
- } Node;
- void push(Node *root, int index, int distance)
- {
- Node *node = (Node*)malloc(sizeof(Node));
- // Node 에 새로운 값을 넣어야 하기 때문에 동적할당을 해줘야 합니다.
- node->index = index;
- node->distance = distance;
- node->next = root->next;
- // 새로운 node의 next 값을 기존의 node의 next 값을 저장
- // 0 1 2 배열에 5 를 추가한다면 5 0 1 2 로 하나씩 뒤로 밀려나는것을 설정한 것입니다.
- root->next = node;
- // 기존의 node 값이 새로 추가한 값을 가리키도록 합니다.
- // 새로운 Node 의 초기값을 잡아줍니다.
- }
- void showAll(Node *root)
- {
- Node *cur = root->next;
- // 출력할 순서의 초기값
- while (cur != NULL)
- {
- printf("%d(거리: %d) ", cur->index, cur->distance);
- // 어떠한 원소로 연결되어 있으며 해당 원소까지의 거리
- cur = cur->next;
- // 출력후 다음 노드를 출력하도록 가르킵니다.
- }
- }
- int main(void)
- {
- int n, m;
- // n = 노드의 갯수, m = 간선의 갯수
- scanf_s("%d %d", &n, &m);
- // 노드의 갯수와 간선의 갯수를 입력 받습니다.
- Node** arr = (Node**)malloc(sizeof(Node*) * n);
- // 인접 리스트로 구현 할 경우 Node 갯수만큼 연결리스트가 필요 공간을 만들어 줍니다.
- for (int i = 1; i <= n; i++)
- {
- arr[i] = (Node*)malloc(sizeof(Node));
- // 각각의 노드를 동적 할당으로 초기화 해줍니다.
- arr[i]->next = NULL;
- // 초기값을 NULL 을 가르키도록 설정
- }
- for (int i = 0; i < m; i++)
- {
- // 각각의 간선에 값을 받을 수 있도록 합니다.
- int x, y, distance;
- scanf_s("%d %d %d", &x, &y, &distance);
- // 각각의 간선과 가중치를 입력 받습니다.
- push(arr[x], y, distance);
- // 특정한 노드 x 를 y 라고 연결하고 가중치 또한 넣어줍니다.
- }
- for (int i = 1; i <= n; i++)
- {
- // 노드 리스트를 출력합니다.
- printf("원소 [%d]: ", i);
- showAll(a[i]);
- printf("\n");
- }
- system("pause");
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement