目标算法:SPFA算法
应用范围:最短路
算法代码:
#include<bits/stdc++.h>
using namespace std;
const int maxn = 205;
vector<pair<int,int> >E[maxn];
int n,m;
int dis[maxn],vis[maxn];
void init()
{
for(int i=0;i<maxn;i++) E[i].clear();
for(int i=0;i<maxn;i++) vis[i] = 0;
for(int i=0;i<maxn;i++) dis[i] = 1e9;
}
int main()
{
while(cin>>n>>m)
{
init();
for(int i=0;i<m;i++)
{
int x,y,z;
scanf("%d%d%d",&x,&y,&z);
E[x].push_back(make_pair(y,z));
E[y].push_back(make_pair(x,z));
}
int s,t;
scanf("%d%d",&s,&t);
queue<int>Q;
Q.push(s);
dis[s] = 0,vis[s] = 1;
while(!Q.empty())
{
int now = Q.front();
Q.pop();vis[now] = 0;
for(int i=0;i<E[now].size();i++)
{
int v = E[now][i].first;
if(dis[v] > dis[now] + E[now][i].second)
{
dis[v] = dis[now] + E[now][i].second;
if(vis[v] == 1) continue;
vis[v] = 0;
Q.push(v);
}
}
}
if(dis[t] == 1e9) printf("-1\n");
else printf("%d\n",dis[t]);
}
}