#include <iostream> #include <cstdio> #include <cmath> #include <cstring> #include <algorithm> #include <queue> #include <stack> #include <vector> #include <iomanip> #include <climits> using namespace std; int n,m,d[200],inq[200];//inq记录该点是否在队列里,d表示s点到各个点的最短距离; vector<pair<int,int> >e[200]; void init() { for(int i=0;i<200;i++) { e[i].clear(); inq[i]=0; d[i]=1e9; } } int main(int argc, char *argv[]) { init(); scanf("%d%d",&n,&m); 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);//s为起点,t为终点 queue<int>q; q.push(s),d[s]=0,inq[s]=1; while(!q.empty()) { int now=q.front(); q.pop();inq[now]=0; for(int i=0;i<e[now].size();i++) { int v=e[now][i].first; if(d[v]>d[now]+e[now][i].second) d[v]=d[now]+e[now][i].second; if(inq[v]==1)continue; inq[v]=1; q.push(v); } } return 0; }
原文:https://www.cnblogs.com/huluxin/p/9782200.html