ch6.7-최적화
예제: TSP(외판원 문제)
무식하게 풀기
완전탐색으로 풀기 위한 전제 조건
재귀 호출을 통한 답안 생성
int n;
int dist[100][100];
bool visited[100];
// 나머지 도시들을 모두 방문하는 경로들 중 가장 짧은 것의 길이를 반환.
int getMinLength(vector <int> &pathList, int sumOfLen) {
if(pathList.size() == n) {
return sumOfLen + dist[pathList.back()][pathList[0]];
}
int answer = numeric_limits<int>::max();
int ret;
for(int i =0; i<n; i++) {
int here = 0;
if(visited[i]) {
continue;
}
if(pathList.size() > 0) {
here = pathList.back();
}
pathList.push_back(i);
visited[i] = true;
ret = getMinLength(pathList, sumOfLen + dist[here][i]);
answer = min(ret, answer);
for(int j = 0; j<4;j++){
cout<<pathList[j]<<" ";
}
cout<<answer<<endl;
pathList.pop_back();
visited[i] = false;
}
return answer;
}
summary
Last updated
Was this helpful?