많은 알고리즘 문제들은 그래프 기반이다
그래프를 입력받는 방법은 크게 두가지가 있는데
1. 인접행렬을 이용하여 연결관계를 나타내는 방법과

2. 링크드 리스트를 통해 그래프를 나타내는 것이다.

이 중 두번째 리스트를 이용한 그래프 입력을 구현해 보았다.
문제를 풀기 위해 우선순위 큐 선언이 들어가 있는데 무시해도 좋다.
입력은 다음과 같다
노드수, 간선수
시작 노드
출발노드 도착노드 가중치
출발노드 도착노드 가중치
출발노드 도착노드 가중치
...

| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 | #define VERTEX_MAX 50 #define INF 2123456789 #include <iostream> #include <vector> #include <queue> #include <fstream> using namespace std; struct cmp {     bool operator()(pair<int, int> a, pair<int, int> b)     {         if (a.second <= b.second)             return 1;         else         {             return 0;         }     } }; priority_queue<int,vector<pair<int,int>>,cmp> gMyPriorityQueue; vector<pair<int, int>> gVertex[VERTEX_MAX]; int gDistance[VERTEX_MAX]; int gStartVertex; int gVertexCount; int gEdgeCount; void fileInput(void); void printDistance(int* distnace); void printGraph(vector<pair<int, int>>* vertex); void fileInput(void) {     int tempStartVertex = 0;     int tempEndVertex = 0;     int tempWeight = 0;     ifstream inputFile("graph_input.txt");     inputFile >> gVertexCount;     inputFile >> gEdgeCount;     inputFile >> gStartVertex;     for (int i = 0; i < gEdgeCount; i++)     {         inputFile >> tempStartVertex;         inputFile >> tempEndVertex;         inputFile >> tempWeight;         gVertex[tempStartVertex].push_back(make_pair(tempEndVertex, tempWeight));             } } void printDistance(int* distance) {     cout << "distance:" << endl;     for (int i = 1; i < gVertexCount + 1; i++)     {         cout << "d[" << i << "] = " << distance[i] << endl;     } } void printGraph(vector<pair<int, int>> *vertex) {     cout << "vertex:" << endl;     for (int i = 1; i < gVertexCount+1; i++)     {         cout << "[" << i << "]";         for (vector<pair<int, int>>::iterator iter = vertex[i].begin(); iter != vertex[i].end(); ++iter)         {             cout << "->";             cout << (*iter).first << "|" << (*iter).second;         }         cout << endl;     } } int main(void) {     fileInput();     printGraph(gVertex);     printDistance(gDistance); } http://colorscripter.com/info#e" target="_blank" style="color:#e5e5e5text-decoration:none">Colored by Color Scripter | 
'프로그래밍 > [Algorithm]' 카테고리의 다른 글
| [Algorithm] DP-2 동적 테이블을 작성하는 Knapsack 예제풀이이다. (0) | 2020.06.01 | 
|---|---|
| [Algorithm] 다익스트라 알고리즘 (0) | 2020.05.07 | 
| [Algorithm] dynamic programming-1 rod(막대기)문제 (0) | 2020.04.28 | 
| [Algorithm] dfs 간단 구현 (단지 번호 문제) (0) | 2020.04.27 | 
| [Algorithm]merge sort 병합정렬 (0) | 2020.04.22 | 
