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 |
Tags
- PS
- 알고리즘
- 다이나믹 프로그래밍
- Graham Scan
- GJK
- 외적
- 리눅스
- Doubly Connected Edge List
- 백준
- Expanding Polytope Algorithm
- dp
- 문제풀이
- 분할축 이론
- C++
- Unity
- 유니티
- 보로노이다이어그램
- ubuntu
- Vector
- 우분투
- linux
- SOH
- C
- 내적
- c#
- 충돌 알고리즘
- AABB
- 수학
- 벡터
- uclidean algorithm
Archives
- Today
- Total
마이 플밍 블로그
[C++]백준 11780 - 플로이드2 본문
11780번: 플로이드 2
첫째 줄에 도시의 개수 n이 주어지고 둘째 줄에는 버스의 개수 m이 주어진다. 그리고 셋째 줄부터 m+2줄까지 다음과 같은 버스의 정보가 주어진다. 먼저 처음에는 그 버스의 출발 도시의 번호가
www.acmicpc.net
풀이
플로이드-워셜 알고리즘에서 경로추적을 추가하면 되는 문제다.
문제는 쉬웠으나 못가는 경우 0을 출력하는걸 깜빡해서 여러번 틀렸다.
코드
#include <iostream>
#include <vector>
using namespace std;
#define CITY 105
#define INF 200000000
int map[CITY][CITY];
int nextNode[CITY][CITY];
int n, m;
void FloydWarshall(){
for(int i = 1; i <= n; i++){
for(int k = 1; k <= n; k++){
for(int j = 1; j <= n; j++){
if(map[k][j] > map[k][i] + map[i][j]){
map[k][j] = map[k][i] + map[i][j];
nextNode[k][j] = nextNode[k][i];
}
}
}
}
}
int main()
{
ios_base::sync_with_stdio(0);cin.tie(0);
cin >> n >> m;
for(int i = 0;i <= n; i++){
for(int k = 0;k <= n; k++){
map[i][k] = INF;
nextNode[i][k] = k;
}
}
for(int i = 0; i < m; i++){
int p1, p2, w;
cin >> p1 >> p2 >> w;
if(map[p1][p2] > w)
map[p1][p2] = w;
}
FloydWarshall();
for(int k = 1; k <= n; k++){
for(int j = 1; j <= n; j++){
if(k != j && map[k][j] != INF)
cout << map[k][j] << " ";
else{
cout << "0 ";
}
}
cout << "\n";
}
for(int p1 = 1; p1 <= n; p1++){
for(int p2 = 1; p2 <= n; p2++){
if(map[p1][p2] == INF || p1 == p2){
cout << "0\n";
}
else{
int u = p1, v = p2;
vector<int> path;
while(true){
u = nextNode[u][v];
path.push_back(u);
if(u == v)
break;
}
cout << path.size()+1 << " " << p1 << " ";
for(int i =0;i<path.size();i++){
cout << path[i] << " ";
}
cout << "\n";
}
}
}
return 0;
}
'문제풀이 > 백준' 카테고리의 다른 글
[C++] 백준 5567 - 결혼식 (0) | 2023.02.26 |
---|---|
[C++] 백준 1937 - 욕심쟁이 판다 (0) | 2023.02.26 |
[C++]백준 1051 - 숫자 정사각형 (0) | 2022.03.15 |
[C++]백준 1708 - 볼록 껍질 (0) | 2022.03.15 |
[C++]백준 14226 - 이모티콘 (0) | 2022.01.11 |