题目大意:给出一个有向图,求从某点到另一点的最短路径
解决:迪杰斯特拉求単源点到其它点的最短路径
#include <iostream>
using namespace std;
#define N 200
#define MAX 0xffffff
int cost[N+10][N+10];
int vis[N+10];
int dist[N+10];
int n;
void init()
{
for(int i=0;i<n;i++)
for(int j=0;j<n;j++)
cost[i][j]=MAX;
}
int dijistra(int start,int end)
{
for(int i=0;i<n;i++)
{
dist[i]=cost[start][i];
vis[i]=false;
}
vis[start]=1;
dist[start]=0;
int pre;
for(int i=1;i<n;i++)
{
int min=MAX;
for(int j=0;j<n;j++)
if(!vis[j] && dist[j]<min){min=dist[j];pre=j;}
vis[pre]=1;
for(int j=0;j<n;j++)
if(!vis[j] && min+cost[pre][j]<dist[j])
{
dist[j]=min+cost[pre][j];
}
}
return dist[end];
}
int main()
{
int m;
while(cin>>n>>m)
{
int i,a,b,w;
init();
for(i=0;i<m;i++)
{//刚开始一直wa,就是因为没写这句话
cin>>a>>b>>w;
if(w<cost[a][b])
{
cost[a][b]=cost[b][a]=w;
}
}
cin>>a>>b;
int ret=dijistra(a,b);
if (ret==MAX)cout<<"-1"<<endl;
else cout<<ret<<endl;
}
// system("pause");
return 0;
}
浙公网安备 33010602011771号