复习算法,最短路径。
单源点的最短路径问题: 给定的带权有向图G和源点v,求从v到G中其余各顶点的最短路径。
dijkstra算法是解决:从某个源点到其余各顶点的最短距离。
其实,说明这个是不能,,,,map[x][y]=map[y][x];有向图,带有方向的~~~
#include <iostream>
#define size 999999999
using namespace std;
int map[110][110];
int low[110];
bool vis[110];
int n;
void dijkstra()
{
memset(vis,0,sizeof(vis));
vis[1]=1;
for(int i=1;i<=n;i++)
low[i]=map[1][i];
for(int k=2;k<=n;k++)
{
int m=size;
int x=0;
for(int i=1;i<=n;i++)
if(!vis[i]&&m>low[i]){
m=low[i];
x=i;
}
if(m==size) break;
vis[x]=1;
for(int i=1;i<=n;i++)
if(!vis[i]&&low[i]>low[x]+map[x][i])
low[i]=low[x]+map[x][i];
}
}
int main()
{
int m;
while(cin>>n>>m,m+n)
{
int x,y,z;
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
map[i][j]=size;
for(int i=1;i<=m;i++){
cin>>x>>y>>z;
if(z<map[x][y])
map[x][y]=map[y][x]=z;
}
dijkstra();
cout<<low[n]<<endl;
}
return 0;
}