9 도 1343: 도시 간 도로망 (최 단 경로 변형)
6780 단어 최 단 경로
A 국 정 부 는 도시 간 통행 과 물자 이동 속 도 를 높이 기 위해 국내 N 개 중대 형 도시 사이 에 K 개 도 로 를 추가 로 건설 하기 로 했다.이 N 개 도시 중 어느 두 도시 가 서로 연결 되 고 가장 짧 은 경로 의 길 이 를 알 고 있 습 니 다.새로운 도로 건설 이 A 개국 도시 에 미 친 영향 을 시시각각 감시 하기 위해 서 당신 을 관찰자 로 임명 합 니 다. 도 로 를 건설 할 때마다 해당 국가의 지도자 에 게 현재 N 개 도시 간 의 최 단 로 의 합 을 보고 하 는 것 을 책임 집 니 다.
사고의 방향
1. 이 문 제 는 플 로 이 드 알고리즘 의 변형 입 니 다. 문 제 는 이미 임의의 두 도시 간 의 최 단 거 리 를 제 시 했 습 니 다. 매번 에 하나의 도 로 를 추가 하고 이 도 로 를 증가 한 후에 각 도시 간 의 최 단 경로 의 합 이 얼마나 줄 어 들 었 는 지 설명 합 니 다.
2. floyd 알고리즘 설명 은 다음 과 같다.
Floyd - Warshall 알고리즘 의 원 리 는 동적 기획 이다
집합 중의 노드 만 중간 노드 로 하 는 가장 짧 은 경로 의 길이 로 설정 합 니 다.
그래서
실제 알고리즘 에서 공간 을 절약 하기 위해 원래 의 공간 에서 직접 교체 할 수 있다. 그러면 공간 은 2 차원 으로 내 려 갈 수 있다.
for k ← 1 to n do
for i ← 1 to n do
for j ← 1 to n do
if (D_{i,k} + D_{k,j} < D_{i,j}) then
D_{i,j} ← D_{i,k} + D_{k,j};
3. 알고리즘 초기 화 시 dp [i] [i] = 0 을 설정 하면 판단 을 줄 일 수 있 습 니 다.
오류 점: i, j 는 모두 1 부터 시작 합 니 다. j 는 i + 1 부터 시작 하 는 것 이 아 닙 니 다.
4. 각 도시 간 의 가장 짧 은 경 로 는?
int sum() {
int res = 0;
for(int i = 1; i <= n; i ++)
for(int j = i+1; j <= n; j ++)
res += dist[i][j];
return res;
}
코드
#include <iostream> #include <stdio.h>
using namespace std; const int INF = 0X3F3F3F3F; int dist[400][400]; int n, k; int sum() { int res = 0; for(int i = 1; i <= n; i ++) for(int j = i+1; j <= n; j ++) res += dist[i][j]; return res; } int main() { freopen("testcase.txt", "r", stdin); while(scanf("%d", &n) != EOF) { for(int i = 1; i <= n; i ++) { for(int j = 1; j <= n; j ++) { scanf("%d", &dist[i][j]); } } scanf("%d", &k); int fm, to, d; for(int i = 0; i < k; i ++) { scanf("%d%d%d", &fm, &to, &d); for(int a = 1; a <= n; a ++) { for(int b = 1; b <= n; b ++) { // WA
if(d+dist[a][fm]+dist[to][b] < dist[a][b]) { dist[a][b] = d+dist[a][fm]+dist[to][b]; dist[b][a] = dist[a][b]; // WA
} } } int res = sum(); cout << res << endl; } } return 0; }
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
HDU 1874: 원활 한 공사 계속 [Dijkstra & SPFA & Floyd]모 성 은 여러 해 동안 의 원활 한 공사 계획 을 실행 한 후에 마침내 많은 길 을 건설 하 였 다.길 을 많이 건 너 지 않 아 도 좋 지 않다. 한 도시 에서 다른 도시 로 갈 때마다 여러 가지 도로 방안 을 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.