π λ¬Έμ λ§ν¬
π νμ΄ κ³Όμ
- DFS κ΄λ ¨ μ νμ λ¬Έμ μ
λλ€.
- κ° λμλ 무쑰건 μ°κ²°λμ΄μλ€λ μ μ μ‘°κ±΄μ΄ μμ΅λλ€.
- κ·Έλμ, μ΄λ€ λμμμ μ΄λ€ λμλ₯Ό λ°©λ¬Έν μ μλμ§ μλμ§λ μ κ²½μ°μ§ μμλ λ©λλ€.
- νμ§λ§, κ²°κ΅μλ μμνλ λμμ λ€μ μμΌ ν©λλ€.
- κ·Έλμ, λ©μλμ 맀κ°λ³μλ‘ startν λμκ° κ³μν΄μ ν¨κ» ν¬ν¨λ©λλ€.
- depth λ³μκ° λμμ μ΄ κ°μμ κ°μμ§ κ²½μ°μλ νμ¬ μλ λμμμ start λμλ‘ κ°λ λΉμ©μ μΆκ°ν΄μΌ ν©λλ€.
- μ΄λ κ² κ³μ°λ μ΄ λΉμ©μ Math.min() λ©μλλ₯Ό ν΅ν΄ μ΅μκ°μ ꡬν©λλ€.
- solve() λ©μλμμλ DFS λ°©μμΌλ‘ ꡬνμ§νν©λλ€.
- λ°©λ¬Ένμ§ μκ³ , λΉμ©μ΄ μμμΌ κ²½μ°μλ§ ν΄λΉνλ λμλ₯Ό λ°©λ¬Ένκ³ μ¬κ·μ μΌλ‘ μ§νν©λλ€.
π» μ½λ
import java.io.*;
import java.util.StringTokenizer;
public class Main {
static int cost;
static int n;
static int[][] arr;
static boolean[] visited;
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
StringTokenizer st = null;
n = Integer.parseInt(br.readLine());
arr = new int[n][n];
visited = new boolean[n];
cost = Integer.MAX_VALUE;
for (int i = 0; i < n; i++) {
st = new StringTokenizer(br.readLine(), " ");
for (int j = 0; j < n; j++) {
arr[i][j] = Integer.parseInt(st.nextToken());
}
}
for (int i = 0; i < n; i++) {
visited[i] = true;
solve(i, i, 0, 0);
}
bw.write(cost + "");
bw.flush();
bw.close();
br.close();
}
private static void solve(int start, int now, int depth, int sum) {
if (depth == n - 1) {
if (arr[now][start] != 0) {
sum += arr[now][start];
cost = Math.min(cost, sum);
}
return;
}
for (int i = 0; i < n; i++) {
if (!visited[i] && arr[now][i] > 0) {
visited[i] = true;
solve(start, i, depth + 1, sum + arr[now][i]);
visited[i] = false;
}
}
}
}
'Algorithm > λ°±μ€' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
λ°±μ€ 2667λ² : λ¨μ§λ²νΈλΆμ΄κΈ° (Java) (0) | 2022.03.22 |
---|---|
λ°±μ€ 3184λ² : μ (Java) (0) | 2022.03.22 |
λ°±μ€ 4963λ² : μ¬μ κ°μ (Java) (0) | 2022.03.22 |
λ°±μ€ 2110λ² : 곡μ κΈ° μ€μΉ (Java) (0) | 2022.03.22 |
λ°±μ€ 15686λ² : μΉν¨ λ°°λ¬ (Java) (0) | 2022.03.22 |