• 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;
    }
    
  • 相关阅读:
    xcode中的udp接收数据
    FMX.MEDIA中的录音功能实现
    DELPHI XE功能
    xcode 中运用lame进行caf文件到mp3文件的转换
    xcode中用AVAudioRecorder录音到指定的caf文件
    enum 在c中的使用(枚举类型)
    c语言中typedef的几种用法
    pta 两个有序链表序列的交集
    Level-order Traversal(c语言函数指针样例)
    求二叉树高度
  • 原文地址:https://www.cnblogs.com/ZhaoxiCheung/p/5447713.html
Copyright © 2020-2023  润新知