문제 설명

문제 링크

http://icpc.me/20168

 

20168번: 골목 대장 호석 - 기능성

첫 줄에 교차로 개수 N, 골목 개수 M, 시작 교차로 번호 A, 도착 교차로 번호 B, 가진 돈 C 가 공백으로 구분되어 주어진다. 이어서 M 개의 줄에 걸쳐서 각 골목이 잇는 교차로 2개의 번호와, 골목의

www.acmicpc.net

풀이

백트레킹을 이용하여 풀 수 있다.

n의 크기가 매우 작으니 백트레킹을 하며 모든 경우를 확인해보면 된다.

코드

#include <cstdio>
#include <algorithm>

using namespace std;

int d[11][11];
int n, m, a, b, c, ans = 1e9, totalSum = 1e9; 
bool visited[11];

void solve(int cur, int total, int maxCost) {
    if (total > c) return;
    if (cur == b) {
        ans = min(ans , maxCost);
        return;
    }
    for (int i = 1; i <= n; i++) {
        if (!d[cur][i] || visited[i]) continue;
        visited[i] = true;
        solve(i, total + d[cur][i], max(maxCost, d[cur][i]));
        visited[i] = false;
    }
}

int main() {
    scanf("%d %d %d %d %d", &n, &m, &a, &b, &c);
    while (m--) {
        int x, y, z; scanf("%d %d %d", &x, &y, &z);
        d[x][y] = d[y][x] = z;
    }
    solve(a, 0, 0);
    printf("%d", ans == 1e9 ? -1 : ans);
}

'Algorithm > BOJ' 카테고리의 다른 글

백준[1270] 전쟁 - 땅따먹기  (0) 2021.10.22
백준[23247] Ten  (0) 2021.10.20
백준[2729] 이진수 덧셈  (0) 2021.10.19
백준[1374] 강의실  (0) 2021.10.16
백준[18429] 근손실  (0) 2021.10.16
복사했습니다!