汉语题。
思路:暴力spfa。不需要变形,适合入门。
#include<iostream>
#include<cstdio>
#include<cstring>
#include<queue>
#include<vector>
#define inf 0x3f3f3f3f
using namespace std;
int dis[105],visit[105];
int n,m;
class Node
{
public:
int e,v;
Node(int a,int b){e = a,v = b;}
};
vector<Node>s[105];
void spfa()
{
memset(dis,inf,sizeof(dis));
memset(visit,0,sizeof(visit));
dis[1] = 0;
queue<int>q;
q.push(1);
visit[1] = true;
while(!q.empty()){
int u = q.front();
q.pop();
visit[u] = false;
int num = s[u].size();
for(int i = 0;i < num; i++){
if(dis[u] + s[u][i].v > dis[s[u][i].e])
continue;
dis[s[u][i].e] = dis[u] + s[u][i].v;
if(!visit[s[u][i].e]){
q.push(s[u][i].e);
visit[s[u][i].e] = true;
}
}
}
}
int main()
{
// freopen("in.txt","r",stdin);
while(cin>>n>>m){
if(n == 0 && m == 0)
break;
for(int i = 1;i <= n; i++)
s[i].clear();
int a,b,c;
for(int i = 1;i <= m; i++){
cin>>a>>b>>c;
s[a].push_back(Node(b,c));
s[b].push_back(Node(a,c));
}
spfa();
cout<<dis[n]<<endl;
}
return 0;
}