- Python
- go
- μ¬λΌμ΄λ© μλμ°
- μΉ΄μΉ΄μ€ μ½ν
- LCs
- BFS
- μΉλ¦°μ΄
- λΉνΈλ§΅
- C++
- golang
- λΉνΈλ§μ€νΉ
- λ°±μ€
- μκ³ λ¦¬μ¦
- js
- nestjs
- νΈλ¦¬
- λ°±μλ ν리μ¨λ³΄λ©
- Union-Find
- λμ νλ‘κ·Έλλ°
- ν리μ¨λ³΄λ©
- λ€μ΅μ€νΈλΌ
- μμ½λ
- κ°μ₯κ°κΉμ΄κ³΅ν΅μ‘°μ
- νλ‘κ·Έλλ¨Έμ€
- μΉ΄μΉ΄μ€2021
- μ΄λΆνμ
- DFS
- μ¬κ·
- μν°λ
- DP
- Today
- Total
Hello Ocean! πΌ
[λ°±μ€/C++] 17182. μ°μ£Ό νμ¬μ λ³Έλ¬Έ
λ¬Έμ
https://www.acmicpc.net/problem/17182
μμ½ :
λͺ¨λ νμ±μ νμ¬νλλ° κ±Έλ¦¬λ μ΅μ μκ°μ κ³μ°νμ¬λΌ.
νμ¬ ν λ€μ μμ νμ±μΌλ‘ λμμ¬ νμλ μμΌλ©° μ΄λ―Έ λ°©λ¬Έν νμ±λ μ€λ³΅ν΄μ κ° μ μλ€.
νμ΄
DFSλ‘ μ ν΄μ§ μμμ μΌλ‘λΆν° λͺ¨λ νμ±μ λ°©λ¬Ένλλ° λλ μ΅μ μκ°μ ꡬν΄μΌ νλλ°, κ·Έ μ μ
μ λ ₯λ κ°μ λ€μ μ΄μ©ν΄μ λͺ¨λ λ Έλ - λͺ¨λ λ Έλ κ°μ μ΅μ 거리μ 2μ°¨μ λ°°μ΄μ ꡬν΄λκ³ μμν΄μΌ νλ€.
μ΅μ 거리 2μ°¨μ λ°°μ΄μ μ±μ°λ λ°μλ νλ‘μ΄λ μμ¬ μκ³ λ¦¬μ¦μ μ΄μ©νμλ€.
νλ‘μ΄λ μμ¬μ΄ O(V^3) 볡μ‘λλ₯Ό κ°μ§λλ°, μ΄ λ¬Έμ μμ V μ΅λ κ°μκ° 10μ΄κΈ° λλ¬Έμ λΆλ΄μμ΄ μ¬μ©ν μ μμλ€.
μ½λ
#include <cstdio>
#include <algorithm>
#define sc scanf_s
#define MAX 987654321
using namespace std;
int N, K;
int dist[10][10]; // maxN: 10
bool visited[10];
int result = MAX;
void DFS(int start, int d, int visitCount) {
if (result < d) return;
if (visitCount == N) {
result = min(result, d); return;
}
for (int i = 0;i < N;i++) {
if (visited[i]) continue;
visited[i] = 1;
DFS(i, d + dist[start][i], visitCount + 1);
visited[i] = 0;
}
}
int main() {
sc("%d %d", &N, &K);
for (int i = 0;i < N;i++)
for (int j = 0;j < N;j++)
sc("%d", &dist[i][j]);
// νλ‘μ΄λ μμ¬
for (int k = 0;k < N;k++) {
for (int i = 0;i < N;i++) {
for (int j = 0;j < N;j++) {
dist[i][j] = min(dist[i][j], dist[i][k] + dist[k][j]);
}
}
}
// λͺ¨λ νμ±μ νμ¬νλλ° κ±Έλ¦¬λ μ΅μ μκ° μ°ΎκΈ°
visited[K] = 1;
DFS(K, 0, 1);
printf("%d\n", result);
return 0;
}
κ²°κ³Ό
'Algorithm' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[λ°±μ€/C++] 1941. μλ¬Έλ μΉ κ³΅μ£Ό (0) | 2021.08.24 |
---|---|
[λ°±μ€/C++] 1405. λ―ΈμΉ λ‘λ΄ (0) | 2021.08.17 |
[λ°±μ€/C++] 1062. κ°λ₯΄μΉ¨ (0) | 2021.08.10 |
[λ°±μ€/C++] 18119. λ¨μ΄ μκΈ° (0) | 2021.08.10 |
[C++/λ°±μ€] 17244. μλ§λ€μ°μ° (0) | 2021.08.03 |