spafa求最短路演算法
阿新 • • 發佈:2018-12-24
#include <iostream> #include <cstring> #include <string> #include <cstdlib> #include <map> #include <vector> #include <cmath> #include <queue> #include <algorithm> #define INF 99999999 using namespace std; int main() { int n,m; int mapp[105][105],dis[105],book[105],num[105]; queue<int>q; while(cin>>n>>m&&n&&m) { for(int i=1;i<=n;i++) { for(int j=1;j<=n;j++) { if(i==j) mapp[i][j]=0; else mapp[i][j]=INF; } } for(int i=1;i<=m;i++) { int a,b,c; cin>>a>>b>>c; mapp[a][b]=c; mapp[b][a]=c; } for(int i=1;i<=n;i++)//初始化源點到各個點的距離為無窮大 dis[i]=INF; dis[1]=0;//到自身距離為0 q.push(1); memset(book,0,sizeof(book)); book[1]=1; while(!q.empty())//spafa演算法 求最短路 { int u=q.front(); q.pop(); for(int v=1;v<=n;v++) { if(dis[v]>dis[u]+mapp[u][v]) { dis[v]=dis[u]+mapp[u][v]; if(book[v]==0) { q.push(v); book[v]=1; } } } book[u]=0; } cout << dis[n] << endl; } return 0; }