几个最短路算法。
http://acm.hdu.edu.cn/showproblem.php?pid=2544
大水题一枚,仅以练手。
Dijkstra:
#include<iostream>using namespace std;#include<queue>#define N 110#define INF 0xfffffffint vis[N];int map[N][N];int d[N];void spfa(int s,int n){ memset(vis,0,sizeof(vis)); memset(d,127,sizeof(d)); d[s] = 0; vis[s] = 1; queue<int> q; q.push(s); while(!q.empty()) { int v = q.front(); q.pop(); vis[v] = 0; for(int i=0;i<n;i++) { if(map[v][i]) { if(map[v][i]+d[v]<d[i]) { d[i] = map[v][i]+d[v]; if(!vis[i]) { vis[i] = 1; q.push(i); } } } } }}int main(){ int n,m; while(cin>>n>>m,n||m) { memset(map,0,sizeof(map)); for(int i=0;i<m;i++) { int a,b,c; cin>>a>>b>>c; a--,b--; if(map[a][b]==0||map[a][b]>c) map[a][b] = map[b][a] = c; } spfa(0,n); cout<<d[n-1]<<endl; } return 0;}