2018 08 07 最短路徑 差分約束

2021-08-22 11:53:16 字數 1758 閱讀 4492

在每年的校賽裡,所有進入決賽的同學都會獲得一件很漂亮的t-shirt。但是每當我們的工作人員把上百件的衣服從商店運回到賽場的時候,卻是非常累的!所以現在他們想要尋找最短的從商店到賽場的路線,你可以幫助他們嗎?

輸入包括多組資料。每組資料第一行是兩個整數n、m(n<=100,m<=10000),n表示成都的大街上有幾個路口,標號為1的路口是商店所在地,標號為n的路口是賽場所在地,m則表示在成都有幾條路。n=m=0表示輸入結束。接下來m行,每行包括3個整數a,b,c(1<=a,b<=n,1<=c<=1000),表示在路口a與路口b之間有一條路,我們的工作人員需要c分鐘的時間走過這條路。

輸入保證至少存在1條商店到賽場的路線

對於每組輸入,輸出一行,表示工作人員從商店走到賽場的最短時間

2 11 2 3

3 31 2 5

2 3 5

3 1 2

0 0題意就是求最短路,由於沒有負權邊,直接

#include#include#include#includeusing namespace std;

struct ver

ver(int v,int w):v(v),w(w){}

};struct dist;

dist(int id,int dis):id(id),dis(dis){}

friend bool operator

};const int maxn=105;

const int inf=0x3f3f3f3f;

vectoredge[maxn];

int ans[maxn],vis[maxn];

void dijkstra(int s)//得到的最短路去更新所有相鄰邊,有可能得到最短路}}

}int main()

printf("\n");

}*/}void spfa(int src)

int main() edge[maxn*10];

void addedge(int u,int v,int w)

void spfa(int s)

" class="mathcode" src=""/>為任意兩點間的最短路徑並且中間點一定不包含

#include#include#includeusing namespace std;

const int maxn=105;

const int inf=0x1f1f1f1f;

int g[maxn][maxn];

int dist[maxn][maxn];

int m,n,ans;

void floyd()

}int main()

ver(int v,int w):v(v),w(w){}

};struct dist;

dist(int id,int dis):id(id),dis(dis){}

friend bool operator

};const int maxn=205;

const int inf=0x3f3f3f3f;

vectoredge[maxn];

int ans[maxn];

void dijkstra(int s)}}

}int main()

scanf("%d%d",&s,&t);

dijkstra(s);

if(ans[t]==inf) printf("%d\n",-1);

else printf("%d\n",ans[t]);

}return 0;

}

K Candies 差分約束 最短路)

有n個孩子,m個關係 關係分別有3個數u,v,w。代表v的糖果數不能多於u w個,也就是dis v dis u w 這就轉換成 if dis v dis u w dis v dis u w.1 spfa stack include include include include includecon...

差分約束系統 最短路徑演算法的應用

差分約束系統是一種特殊的n元一次不等式組,它包含n個變數x1 xn以及m個約束條件,每個約束條件都是由兩個變數做差構成,形如xi xj ck,其中ck是常數 可以是負數也可以是非負數 1 i,j n,1 k m.我們要解決的問題是求一組解,x1 a1,x2 a2,x3 a3,xn an,使得所有條件...

Codeup最短路徑 最短路徑

n個城市,標號從0到n 1,m條道路,第k條道路 k從0開始 的長度為2 k,求編號為0的城市到其他城市的最短距離。第一行兩個正整數n 2 n 100 m m 500 表示有n個城市,m條道路,接下來m行兩個整數,表示相連的兩個城市的編號。n 1行,表示0號城市到其他城市的最短路,如果無法到達,輸出...