• HDU 2544 单源最短路


    题目链接: 传送门

    最短路

    Time Limit: 1000MS     Memory Limit: 65536K

    题目描述

    在每年的校赛里,所有进入决赛的同学都会获得一件很漂亮的t-shirt。但是每当我们的工作人员把上百件的衣服从商店运回到赛场的时候,却是非常累的!所以现在他们想要寻找最短的从商店到赛场的路线,你可以帮助他们吗?

    输入

    输入包括多组数据。每组数据第一行是两个整数N、M(N<=100,M<=10000),N表示成都的大街上有几个路口,标号为1的路口是商店所在地,标号为N的路口是赛场所在地,M则表示在成都有几条路。N=M=0表示输入结束。接下来M行,每行包括3个整数A,B,C(1<=A,B<=N,1<=C<=1000),表示在路口A与路口B之间有一条路,我们的工作人员需要C分钟的时间走过这条路。输入保证至少存在1条商店到赛场的路线。>

    输出

    对于每组输入,输出一行,表示工作人员从商店走到赛场的最短时间

    输入示例

    2 1
    1 2 3
    3 3
    1 2 5
    2 3 5
    3 1 2
    0 0
    

    输出示例

    3
    2
    
    #include<cstdio>
    #include<queue>
    using namespace std; 
    #define INF 0x3f3f3f3f
    const int MAX_N = 105;
    bool flag[MAX_N];
    int edge[MAX_N][MAX_N];
    
    int spfa(int n)
    {
    	int dis[MAX_N];
    	queue<int >que;
    	
    	for (int i = 1;i <= n;i++)
    	{
    		dis[i] = INF;
    		flag[i] = false;
    	} 
    	
    	dis[1] = 0;
    	que.push(1);
    	flag[1] = true;
    	
    	while (!que.empty())
    	{
    		int curval = que.front();
    		que.pop();
    		flag[curval] = false;
    		
    		for (int i = 1;i <= n;i++)
    		{
    			if (dis[curval] < dis[i] - edge[curval][i]) //dis[i] > dis[curval} + edge[curval][i]
    			{
    				dis[i] = dis[curval] + edge[curval][i];
    				if (!flag[curval])
    				{
    					que.push(i);
    					flag[i] = true;
    				}
    			}
    		}
    	}
    	return dis[n];
    }
    
    int main()
    {
    	int n,m,u,v,val;
    	
    	while (~scanf("%d%d",&n,&m) != EOF && n && m)
    	{
    		for (int i= 1;i <= n;i++)
    		{
    			for (int j = 1;j <= i;j++)
    			{
    				if (i == j) edge[i][j] = 0;
    				else edge[i][j] = edge[j][i] = INF;
    			}
    		}
    		
    		for (int i = 0;i < m;i++)
    		{
    			scanf("%d%d%d",&u,&v,&val);
    			edge[u][v] = edge[v][u] = val;
    		}
    		
    		int time = spfa(n);
    		
    		printf("%d
    ",time);
    	}
    	return 0;
    }
    
  • 相关阅读:
    select_tag in rails about selected not change and onchange()
    debian7 请把标有“Debian GNU/Linux 7.1.0 _Wheezy_
    rails关于utf8问题-------------------utf8申明必须置顶
    ruby 删除文件
    svn conflict
    40亿个有序不同的数的文件中找一个缺失的数
    马云语录
    语音识别概率问题,一段在数学之美了看到的话
    两个有序数组的中位数
    磁盘文件排序-编程珠玑
  • 原文地址:https://www.cnblogs.com/ZhaoxiCheung/p/5447713.html
Copyright © 2020-2023  润新知