티스토리 뷰
#include <stdio.h>
int n, key;
int v[10] = {0}; //백트래킹용 방문했는지 안했는지
int d[10][10] = {}; //최단 거리 배열
int ans = 100000000; //정답을 담는 변수
void loop(int s, int cnt, int sum) { //백트래킹
if(cnt == n-1) {
if(ans > sum) ans=sum;
return;
}
for(int i=0; i<n; i++) {
if(v[i]) continue;
sum+=d[s][i];
v[i]=1;
loop(i, cnt+1, sum);
v[i]=0;
sum-=d[s][i];
} return;
}
int main(void) {
int INF = 100000000; //input
scanf("%d %d", &n, &key);
for(int i = 0; i<n; i++)
for(int j = 0; j<n; j++) scanf("%d", &d[i][j]);
for(int k=0; k<n;k++) //floyd warshall
for(int i=0; i<n; i++)
for(int j=0; j<n; j++) {
if(d[i][k] + d[k][j] < d[i][j])
d[i][j] = d[i][k]+d[k][j];
}
//백트래킹으로 최단거리 찾기
v[key] = 1;
loop(key, 0, 0);
printf("%d", ans); //정답 출력
}
풀이 : Floyd Warshall -> 백트래킹
0. 행성의 개수, 출발 행성, 기본 행성간 거리 입력받음
1. floyd warshall
2. 백트래킹
3. 결과 출력
'c언어 > BAEKJOON' 카테고리의 다른 글
c언어 2224번 명제 증명 (백준) (0) | 2023.01.02 |
---|---|
c언어 2458번 키 순서 (백준) (0) | 2023.01.02 |
c언어 16958번 텔레포트 (백준) (0) | 2023.01.01 |
c언어 15723번 n단 논법 (백준) (0) | 2022.12.31 |
c언어 3363번 동전 (백준) (0) | 2022.12.20 |
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- DP
- 누적합
- 덱
- Segment Tree
- C언어
- java
- XOR
- 플로이드
- 최소 스패닝 트리
- BFS
- 스택
- find
- 1835
- Lazy Propagation
- PASCAL
- 백준
- union
- 누적 합
- 정렬
- 오프라인 쿼리
- 그래프
- C++
- 1835번
- 기하학
- 최대공약수
- 세그먼트 트리
- 브루트포스
- 그리디
- Krustal
- DFS
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
글 보관함