zoukankan      html  css  js  c++  java
  • HDU 1874 畅通project续 最短路径入门(dijkstra)

    Problem Description
    某省自从实行了非常多年的畅通project计划后,最终修建了非常多路。只是路多了也不好,每次要从一个城镇到还有一个城镇时,都有很多种道路方案能够选择,而某些方案要比还有一些方案行走的距离要短非常多。这让行人非常困扰。

    如今,已知起点和终点,请你计算出要从起点到终点。最短须要行走多少距离。
     

    Input
    本题目包括多组数据。请处理到文件结束。


    每组数据第一行包括两个正整数N和M(0<N<200,0<M<1000),分别代表现有城镇的数目和已修建的道路的数目。

    城镇分别以0~N-1编号。


    接下来是M行道路信息。

    每一行有三个整数A,B,X(0<=A,B<N,A!=B,0<X<10000),表示城镇A和城镇B之间有一条长度为X的双向道路。


    再接下一行有两个整数S,T(0<=S,T<N),分别代表起点和终点。

     

    Output
    对于每组数据,请在一行里输出最短须要行走的距离。假设不存在从S到T的路线。就输出-1.
     

    Sample Input
    3 3 0 1 1 0 2 3 1 2 1 0 2 3 1 0 1 1 1 2
     

    Sample Output
    2 -1 代码:
    #include<iostream>
    #include<cstdio>
    using namespace std;
    #define max  99999
    #define q 205
    int map[205][205];
    int vis[q];
    int dis[q];
    int m,s,e;
    int dijkstra()
    {
    	int min1,i,j,pos;
    	for(i=0;i<m;i++)             
    	{
    		dis[i]=map[s][i];        //直接初始 s点到 i点的距离
    		vis[i]=0;
    	}
    	dis[s]=0;
    	for(i=0;i<m;i++)
    	{
    		min1=max;
    		for(j=0;j<m;j++)
    		{
    			if(vis[j]==0&&dis[j]<min1)
    			{
    				min1=dis[j];           //取一条最小边
    				pos=j;
    			}
    		}
    		vis[pos]=1;
    		for(j=0;j<m;j++)             
    		{
    			if(vis[j]==0&&dis[j]>dis[pos]+map[pos][j])          //替换初始距离
    				dis[j]=dis[pos]+map[pos][j];
    		}
    		
    	}
    	if(dis[e]!=max)
    		return dis[e];
    	else
    		return -1;
    }
    int main()
    {
    	int a,b,c;
    	int n,i,j;
    	while(~scanf("%d%d",&m,&n))
    	{
    		for(i=0;i<m;i++)
    			for(j=i;j<m;j++)                //初始化地图
    				map[i][j]=map[j][i]=max;
    			while(n--)
    			{
    				scanf("%d%d%d",&a,&b,&c);
    				if(c<map[a][b])               //可能有重边取最短边
    				map[a][b]=map[b][a]=c;
    			}
    			
    			scanf("%d%d",&s,&e);
    			
    			int ss=dijkstra();
    			printf("%d
    ",ss);
    	}
    	return 0;
    }

    dijkstra模板
     
  • 相关阅读:
    Java和Flex积分误差(一个)
    分组统计查询(本章小结)
    crm使用soap删除实体
    宁可信其有,谎言重复千遍就会成为真理,性格可以被改变
    意想不到的一天,无法逃出的肖申克
    测试使用wiz来发布blog
    2013年7月4日星期四
    2013年7月3日星期三
    2013年7月2日星期二
    2013年7月1日星期一
  • 原文地址:https://www.cnblogs.com/yangykaifa/p/6800058.html
Copyright © 2011-2022 走看看