λ¬Έμ
μ½λ
#include <iostream>
#include <vector>
#include <memory.h>
using namespace std;
int N, min_cost = 1e9;
int graph[11][11];
int visited[11];
void dfs(int start, int node, int cost, int depth){\
if(depth == N && node == start){
min_cost = min(min_cost, cost + graph[node][start]);
return;
}
for(int i=0; i<N; i++){
if(!visited[i] && graph[node][i] && cost<min_cost){
visited[i] = 1;
dfs(start, i, cost+graph[node][i], depth + 1);
visited[i] = 0;
}
}
}
int main(){
ios_base::sync_with_stdio(false);
cin.tie(0);
cin>>N;
for(int i=0; i<N; i++){
for(int k=0; k<N; k++){
cin>>graph[i][k];
}
}
for(int i=0; i<N; i++){
dfs(i, i, 0, 0);
memset(visited, 0 ,sizeof(visited));
}
cout<<min_cost;
}
νμ΄
μΈνμ μνλ Traveling Salesman problem (TSP) λΌκ³ λ λΆλ¦¬λ©°, κ·Έλνμμ μΆλ° μ μ μμ λ€λ₯Έ λͺ¨λ μ μ λ€μ λ°©λ¬Ένκ³ μλμ μΆλ° μ μ μΌλ‘ λλμμ€λ μν κ²½λ‘λ€ μ€μμ κ°μ€μΉμ ν©μ΄ μ΅μκ° λλ μν κ²½λ‘λ₯Ό μ°Ύλ λ¬Έμ μ λλ€.
μ¦, κ²½λ‘κ° 5κ°μ λ Έλκ° μμ λ 1 -> 2 -> 3 -> 4 -> 5 -> 1 μ΄λ° μμΌλ‘ λμμ¬ λ κ°μ€μΉμ ν©μ΄ κ°μ₯ μ΅μκ° λλ κ²½λ‘λ₯Ό μ°Ύλ λ¬Έμ μ λλ€.
μ λ¬Έμ μμλ μ΅μ λΉμ©μ μΆλ ₯νλΌκ³ νκΈ° λλ¬Έμ λ°±νΈλνΉμ λλ €μ μ΅μ λΉμ©λ§ κ³μ κ°±μ ν΄κ°λ©° μ΅μ’ μ μΌλ‘ μΆλ ₯νλ©΄ λ©λλ€.
'Algorithm π§π»βπ» > λ°±μ€(BOJ)' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[λ°±μ€,c++] 1174λ² - μ€μ΄λλ μ (0) | 2022.08.21 |
---|---|
[λ°±μ€,c++] 14712λ² - λ΄λͺ¨λ΄λͺ¨ (Easy) (0) | 2022.08.20 |
[λ°±μ€,c++] 16987λ² - κ³λμΌλ‘ κ³λμΉκΈ° (0) | 2022.08.20 |
[λ°±μ€,c++] 17266λ² - μ΄λμ΄ κ΅΄λ€λ¦¬ (0) | 2022.08.18 |
[λ°±μ€,c++] 17521λ² - Byte Coin (0) | 2022.08.18 |
[λ°±μ€,c++] 11437λ² - LCA (0) | 2022.08.17 |
λκΈ