* 문제
가중치 방향그래프가 주어지면 1번 정점에서 N번 정점으로 가는 최소비용을 출력하는 프로그램을 작성하세요.
(!)목적지까지 가는 최소 비용은 보통 "다익스트라 알고리즘" 사용함
인접행렬 활용
// 67번 - 최소비용 DFS 인접행렬 (가중치 방향그래프)
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int n, a, b, c, map[30][30], ch[30], cost = 999999999;
//cost는 minimum value
void DFS(int v, int sum) {
if (v == n) {
if (sum < cost)
cost = sum;
}
else {
for (int i = 1; i <= n; i++) {
//가중치 값이 있냐? == 0보다 크냐
if (map[v][i] > 0 && ch[i] == 0) {
ch[i] = 1;
DFS(i, sum + map[v][i]);
ch[i] = 0;
}
}
}
}
int main() {
int m;
scanf("%d %d", &n, &m);
for (int i = 1; i <= m; i++) {
scanf("%d %d %d", &a, &b, &c);
map[a][b] = c;
}
ch[1] = 1;
DFS(1, 0); //두번째 파라미터는 비용값
printf("%d", cost);
return 0;
}
인접리스트 활용 (STL::vector, pair 사용)
*pair라는 자료구조?
2개의 데이터를 한쌍으로 묶어서 관리하는 것, 구조체하고 비슷한데 이건 2개만 한쌍으로 묶는 것
pair<int, int> p;
- p라는 이름으로 관리됨
노드를 생성해서 값을 넣는 것은
p=make_par(10,20);
printf("%d %d\n", p,first, p.second);
- 실제 노드가 생성됨
- 객체가 생성됨
- 값이 들어감
* pair 활용하여 인접리스트 만드는 핵심 코드
vector<pair<int, int> > map[30];
map[a].push_back(make_pair(b,c));
// 68번 - 최소비용 DFS 가중치 방향 그래프 (인접리스트)
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <vector>
#include <algorithm>
using namespace std;
int n, a, b, c, ch[30], cost = 999999999;
vector<pair<int, int> > map[30];
void DFS(int v, int sum) {
if (v == n) {
if (sum < cost)
cost = sum;
}
else {
for (int i = 0; i < map[v].size(); i++) {
if (ch[map[v][i].first] == 0) { //방문안한 것
//map[v][i].first는 정점임
ch[map[v][i].first] = 1;
DFS(map[v][i].first, sum + map[v][i].second);
ch[map[v][i].first] = 0;
}
}
}
}
int main() {
int m;
scanf("%d %d", &n, &m);
for (int i = 1; i <= m; i++) {
scanf("%d %d %d", &a, &b, &c);
map[a].push_back(make_pair(b,c)); //c는?
}
ch[1] = 1;
DFS(1, 0);
printf("%d", cost);
return 0;
}
'[알고리즘] 문제풀이 연습' 카테고리의 다른 글
[알골90제] 70번 - 그래프 최단거리 BFS (0) | 2019.08.09 |
---|---|
[알골90제] 69번 - 넓이우선탐색 BFS (큐 자료구조 구현) (0) | 2019.08.06 |
[알골90제] 66번 - 경로찾기:DFS (인접리스트로 풀기/64번과 문제 동일) (0) | 2019.08.05 |
[알골90제] 64번-경로탐색 DFS(노드, 간선) / 65번미로탐색 DFS(인접행렬) (0) | 2019.08.05 |
[알골90제] 63번 - 인접행렬(가중치 방향그래프) / 무방향그래프, 방향그래프 (0) | 2019.08.04 |