http://acm.hdu.edu.cn/showproblem.php?pid=1874
这个是一个很简单的 最短路问题
#include<iostream>
#include<cstring>
#include<cstdio>
using namespace std;
int a[202][202];
bool v[202];
int dis[202];
#define INF 999999999
int n,m,s,t;
void Dijkstra()
{
int k;
memset(v,false,sizeof(v));
for(int i=0;i<n;i++)
{
dis[i]=a[s][i];
}
dis[s]=0;
// v[s]=true;
for(int i=0;i<n;i++)
{
int min=INF;
for(int j=0;j<n;j++)
{
if(!v[j]&&min>dis[j])
{
min=dis[j];
k=j;
}
}
if(min==INF) break;
v[k]=true;
for(int j=0;j<n;j++)
{
if(!v[j])
{
if(dis[k]+a[k][j]<dis[j])
{
dis[j]=dis[k]+a[k][j];
}
}
}
}
if(dis[t]!=INF) cout<<dis[t]<<endl;
else
cout<<"-1"<<endl;
}
int main()
{
int i,j,k;
while(cin>>n>>m)
{
for(i=0;i<n;i++)
for(j=0;j<n;j++)
a[i][j]=INF;
while(m--)
{
cin>>i>>j>>k;
if(a[i][j]>k)
a[i][j]=a[j][i]=k;
}
cin>>s>>t;
Dijkstra();
}
return 0;
}
测试数据
/*
12 14
1 3 1
5 1 4
5 8 3
8 2 6
8 4 3
5 4 1
3 9 5
9 10 2
9 7 7
6 3 4
6 4 4
4 7 5
10 7 3
5 6 2
1 4
*/