--------------------------------- 열파 그래프 이론 (SPFA) / 최단

이 여름의 더위에서 고통받는 사람들의 텍사스 단순 거대한 파도! ! !

그들의 텍사스 롱혼 좋은 맛,하지만 그들은 유제품 크림 풍부한 생산에 매우 좋지 않다.

농부 존 리드에게 텍사스가 고통을 견딜 열을 줄이기 위해, 텍사스의 작업에 차가운 우유 영양 공급의 많은 양을 차지하기 위해이 시간이 걸렸습니다.

존은 텍사스 경로에 위스콘신에서 우유를 수송 할 수 공부했다.

상기 경로 번호는 1 T. 참조를 용이하게하기 위해, 시작 및 종료 포인트 T 도시 총 포함

도로 양방향의 시작과 끝뿐만 아니라 각 도시는 적어도 두 개의 다른 도시를 연결합니다.

각 (연료비, 통행료 등을 포함 함) 내지도 비용을 갖는다.

도로 C 조 2 도시에 대한 직접 접속을 통한지도를 감안할 때.

도로 루피, 다시 및 소비 CI 엔드 구성 요소의 시작 지점에서 각각의 경로.

초기 TS의 끝 마을에서 최소 총 비용을 추구 테 마을.

입력 형식
첫째 줄 : 4의 정수 공백으로 구분 : T, C, TS 테 ;

2 + 1 내지 C : 회선 I + 1, i 번째 행의 세 정수 공백으로 구분있어서, 도로를 설명한다 : RS 다시, CI.

의 출력 형식
테에 TS의 최소 총 비용에서 하나의 정수입니다.

데이터는 적어도 하나 개의 도로의 존재를 보장합니다.

데이터 범위
1≤T≤2500,
1≤C≤6200,
1≤Ts 테의 중계국 Re≤T,
1≤Ci≤1000
입력 샘플 :
. 제 5 11 4
2 2 4
. 1 4. 3
. 7 2 2
. 3 (4) . 3
. 5 7 5
7 3 3
. 6 (1) (1)
. 제 3 4
2 3 4
. 5 6 3
7 2. (1)
출력 샘플 :
7

분석 :
최단 보드


#include<bits/stdc++.h>
using namespace std;
const int N=1e5+1000;
int t,c,sx,ex;
int h[N],e[N],ne[N],idx,w[N];
int dist[N];
bool st[N];
void add(int a,int b,int c)
{
    e[idx]=b;w[idx]=c;ne[idx]=h[a];h[a]=idx++;
}
void spfa()
{
    memset(dist,0x3f,sizeof dist);
    dist[sx]=0;
    queue<int> q;
    q.push(sx);
    st[sx]=true;
    while(q.size())
    {
        int t=q.front();
        q.pop();
        st[t]=false;
        for(int i=h[t];~i;i=ne[i])
        {
            int j=e[i];
            if(dist[j]>dist[t]+w[i])
            {
                dist[j]=dist[t]+w[i];
                if(!st[j])
                {
                     q.push(j);
                    st[j]=true;
                }
            }
        }
    }
    
}
int main()
{
    cin>>t>>c>>sx>>ex;
    memset(h,-1,sizeof h);
    for(int i=0;i<c;i++)
    {
        int a,b,w;
        cin>>a>>b>>w;
        add(a,b,w);
        add(b,a,w);
    }
    spfa();
    cout<<dist[ex]<<endl;
}
게시 된 383 개 원래 기사 · 원 찬양 7 · 전망 8024

추천

출처blog.csdn.net/qq_43690454/article/details/104276931