C++ Algorithm & Study/C++ & Algorithm Strategies
[Algorithm Strategies] 04. Exhaustive Search - Traveling Sale
GameChoi
2023. 7. 12. 19:56
1. Exhaustive Search
1.1 Traveling Sale - Optimization Problem
1.1.1 Problem
- 어떤 나라에 n개의 큰 도시, 각 도시들은 모두 직선 도로로 연결
- 한 영업 사원이 한 도시에서 출발해 다른 도시들을 전부 한번 씩 방문한 뒤 시작 도시로 돌아오려고 함
- 이때 모든 경로 중 가장 짧은 경로로 찾는 방법
1.1.2 Algorithm Strategy
- 나머지 도시들을 모두 방문하는 경로들 중 가장 짧은 것의 길이를 반환
double Exhaustive::shortestPath(vector<int>& path, vector<bool>& visited, double currentLength);
- 모든 도시를 방문하는 방법 중 가장 거리가 짧은 위치를 찾아 값을 반환
1.1.3 implementation
- 모든 도시들을 방문했을 경우 거리를 반환하고 함수 종료
if (path.size() == n) return currentLength + dist[path[0]][path.back()];
- 무한대의 값을 설정한 후 n개의 도시들을 돌면서 가장 짧은 거리를 계산
- 가장 짧은 거리가 나올 경우 그 값을 반환하여 도시를 모두 방문하면서 가장 짧은 거리를 구할 수 있음
double ret = numeric_limits<double>::max();
for (int next = 0; next = n; next++)
{
if (visited[next]) continue;
int here = path.back(); path.push_back(next); visited[next] = true;
double cand = shortestPath(path, visited, currentLength + dist[here][next]);
ret = min(ret, cand); visited[next] = false; path.pop_back();
}
return ret;