problem description
某省自從實行了很多年的暢通工程計畫後,終於修建了很多路。不過路多了也不好,每次要從乙個城鎮到另乙個城鎮時,都有許多種道路方案可以選擇,而某些方案要比另一些方案行走的距離要短很多。這讓行人很困擾。
現在,已知起點和終點,請你計算出要從起點到終點,最短需要行走多少距離。
input
本題目包含多組資料,請處理到檔案結束。
每組資料第一行包含兩個正整數n和m(0
output
對於每組資料,請在一行裡輸出最短需要行走的距離。如果不存在從s到t的路線,就輸出-1.
sample input
3 30 1 1
0 2 3
1 2 1
0 23 1
0 1 1
1 2
sample output
2-1
模板模板 還是模板,,
#include using namespace std;
const int maxn=555; //注意陣列下標
const int inf=9999999;
int map[maxn][maxn];
int dis[maxn];//存放當前源點v到其他點i的最短距離
bool vis[maxn];
int n,m;//頂點數
int start,endd;//起點終點
void dijkstra(int x)//v為源點
} if(dis[endd]==inf)
printf("-1\n");
else
coutmap[a][b]=map[b][a]=c;
} scanf("%d%d",&start,&endd);
dijkstra(start);
} return 0;
}#include #include using namespace std;
const int inf=9999999;
const int maxn=5555;
int map[maxn][maxn];//鄰接矩陣
int n,m,g_m;//n為頂點數
int vis[maxn];//判斷頂點是否在佇列中.可多次入隊
int dis[maxn];//最短距離
int cnt[maxn];//作用:判斷負權值
int start,endd;//起點終點
int i,j;
bool spfa()//spfa演算法
}} }
return true;
}int main()
scanf("%d%d",&start,&endd);
start++;
bool flag=spfa();
if(dis[endd+1]==inf)
printf("-1\n");
else
printf("%d\n",dis[endd+1]);
} return 0;
}#include using namespace std;
const int maxn=5555;
const int inf=9999999;
struct edge
g[maxn];
int n,m,i,j;
int g_m;
int start,endd;
int dis[maxn];
bool bellman_ford()
} if(flag==false)
break;
} for(j=0;jdis[s]+ss)
return false;
} return true;
}int main()
{ int s,e,ss;
while(scanf("%d%d",&n,&m)!=eof)
{ g_m=0;
for(i=0;i
hdu1874 暢通工程續(最短路徑)
problem description 某省自從實行了很多年的暢通工程計畫後,終於修建了很多路。不過路多了也不好,每次要從乙個城鎮到另乙個城鎮時,都有許多種道路方案可以選擇,而某些方案要比另一些方案行走的距離要短很多。這讓行人很困擾。現在,已知起點和終點,請你計算出要從起點到終點,最短需要行走多少距...
hdu1874 暢通工程續 (最短路)
已知起點和終點,請你計算出要從起點到終點,最短需要行走多少距離。經典的單源 最短路 用dijkstra,這裡要注意的是有重邊,取最小的那個。已知起點和終點,請你計算出要從起點到終點,最短需要行走多少距離。經典的單源 最短路 用dijkstra,這裡要注意的是有重邊,取最小的那個。include in...
HDU 1874 暢通工程續(最短路)
problem description 某省自從實行了很多年的暢通工程計畫後,終於修建了很多路。不過路多了也不好,每次要從乙個城鎮到另乙個城鎮時,都有許多種道路方案可以選擇,而某些方案要比另一些方案行走的距離要短很多。這讓行人很困擾。現在,已知起點和終點,請你計算出要從起點到終點,最短需要行走多少距...