반응형
Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- ELK
- 방이편백육분삼십성신여대
- 국가직
- 뚝섬역맛집
- 돈암동맛집
- tomcat7
- springboot
- npm
- JavaScript
- 한남동맛집
- 성신여대편백집
- 통영여행
- 자바스크립트에러처리
- 스페인여행
- 통영에어비앤비
- 통영
- 서울숲누룽지통닭구이
- 성신여대맛집
- 퇴사후공무원
- 공무원
- 파이썬
- 한성대맛집
- 통영예쁜카페
- 방이편백육분삼십
- gradle
- react
- 영화추천
- ubuntu자바설치
- 꼴뚜기회
- 성북구맛집
Archives
- Today
- Total
코린이의 기록
[BOJ] 10971 - 외판원 순회2 (C++) 본문
반응형
1. 알고리즘
이 문제는 다음순열(Next permutation)을 이용하여 풀 수있는 문제이다.
2. 전체 소스
#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
int main()
{
vector< vector<int> > arr;
int num = 0;
int result = 0;
int min = 0;
int cnt = 0; // minimum값을 처음 값으로 초기화 하기위해 사용된다. cnt가 0이면 처음 계산된 값을 min 값으로 초기화 해준다.
int flag = 0; // 순열의 길을 더해가다가 다음 길로 갈 수 없는 길(행렬값이 0일 경우)이 나올 경우 이 flag를 true로 바꿔준다.
cin >> num;
arr.assign(num, vector<int>(num));
vector<int> roadArr(num+1); // 다시 처음으로 돌아와야 하기 때문에 도시 개수를 +1 해주었다.
// 이 배열은 도시순환 순열순서를 저장하기 위한 배열이다.
for (int i = 0; i<num; i++) {
for (int j = 0; j<num; j++) {
cin >> arr[i][j];
}
}
for (int i = 0; i<num; i++) {
roadArr[i] = i; // 도시 개수만큼 배열에 index값을 넣어주었다.
} // 도시가 4개면 roadArr={0,1,2,3}이 된다. 이 값들은 행렬의 index로 사용된다.
do {
result = 0;
flag = 0;
roadArr[num] = roadArr[0]; // 다시 되돌아올 처음 도시를 roadArr마지막 배열에 넣어주었다.
for (int i = 0; i < num; i++) {
int temp_x;
int temp_y;
temp_x = roadArr[i];
temp_y = roadArr[i + 1];
if (arr[temp_x][temp_y] == 0) {
flag = 1; // 행렬 값이 0 이라는 것의 의미는 temp_x에서 temp_y도시로 갈 길이 없음을 의미함
break; // 더이상 값을 구할 필요가 없으니 loop를 빠져나온다.
}
result += arr[temp_x][temp_y];
}
if(cnt==0 && flag == 0){ // minimum값을 초기화 시켜준다.
min = result;
cnt++;
}else{
if(flag == 0){
if (min > result)
min = result;
}
}
} while (next_permutation(roadArr.begin(), roadArr.end()-1));
// 도시 순열 배열의 마지막은 처음 도시로 셋팅해줄 것이기 때문에 end-1까지만 순열을 구한다.
cout << min << endl;
}
3. 참고사항
4. 문제
반응형
'c&c++ > 백준' 카테고리의 다른 글
[BOJ] 9095 - 1,2,3 더하기 (C++) (0) | 2018.05.08 |
---|---|
[BOJ] 11727 - 타일링2 (C++) (0) | 2018.05.08 |
[BOJ] 1463 - 1로 만들기 (C++) (0) | 2018.05.08 |
[BOJ] 1697 - 숨바꼭질 (C++) (0) | 2018.05.08 |
[BOJ] 10819 - 차이를 최대로 (C++) (0) | 2018.05.08 |
Comments