您的位置:首页 > Web前端 > JavaScript

最短路 dijstra

2017-03-22 15:47 615 查看
#include<stdio.h>
#include<string.h>

int map[100][100];// 保存地图
int vis[100]; // 标记
int dis[100]; // 记录 节点n到各个节点最小的路径
const int inf=1<<30;

int min(int a,int b){
return a>b?b:a;
}

int disk(int n){

int i,j,minx,index;
for( i=1; i<=n; ++i )
{
minx=inf;
for( j=1; j<=n; ++j )   //  从dis数组里面n点到其他各点中最短的一个点  找出来
{
if( vis[j]==0 && dis[j] < minx )
{
minx = dis[j];
index = j;
}
}
vis[index]=1; // 找到 这点   加入到最近的距离里    也就是从 n-->index 最短的距离
//
if( index == 1 )
break;
for( j=1; j<=n; ++j )  //  经过index 松弛 各节点
{
if( vis[j]==0 && map[index][j]<inf && map[index][j]+dis[index] < dis[j] )
dis[j] = map[index][j] + dis[index];
}

}
return dis[1];
}

int main(){

int t,n,i,j;
int a,b,c;
while(~scanf("%d%d",&t,&n))//
{
for( i=1; i<=n; ++i )   // 初始化地图
for( j=1; j<=n; ++j )
map[i][j]=(i==j?0:inf);

for( i=0; i<t; ++i )
{
scanf("%d%d%d",&a,&b,&c);
map[a][b]=c;
map[b][a]=c;
}

memset(vis,0,sizeof(vis));
vis
=1;
for( i=1; i<=n; ++i )
dis[i]=map
[i];// 记录n到各点中的距离
int ans=disk(n);
printf("%d\n",ans);
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: