在每年的校賽裡,所有進入決賽的同學都會獲得一件很漂亮的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號城市到其他城市的最短路,如果無法到達,輸出...