zoukankan      html  css  js  c++  java
  • Hdoj 2544

    原题链接

    描述

    在每年的校赛里,所有进入决赛的同学都会获得一件很漂亮的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

    思路

    dijkstra算法,套模版就好

    代码

    #include <bits/stdc++.h>
    #define INF 0xffffff
    #define maxn 101
    using namespace std;  
    
    int dist[maxn][maxn];
    int line[maxn], f[maxn];
    int n, m;
    
    void init()
    {
    	memset(f, 0, sizeof(f));
    	for(int i = 0; i < maxn; i++)
    		for(int j = 0; j < maxn; j++)
    			dist[i][j] = INF;
    }
    
    void dijkstra(int v)
    {
    	for(int i = 0; i < n; i++)
    		if(i != v) line[i] = dist[v][i];
    		else line[i] = INF;
    	f[v] = 1;
    	for(int i = 0; i < n; i++)
    	{
    		int min = INF, k = v;
    		for(int j = 0; j < n; j++)
    			if(!f[j] && line[j] < min) {min = line[j]; k = j;}
    		f[k] = 1;
    		for(int j = 0; j < n; j++)
    			if(!f[j] && dist[k][j] < line[j] - min) line[j] = dist[k][j] + min;
    	}
    }
    
    int main()
    {  
        while(~scanf("%d%d", &n, &m))
        {
        	if(n+m==0) break;
        	init();
        	for(int i = 0; i < m; i++)
        	{
        		int x, y, d;
        		scanf("%d %d %d", &x, &y, &d);
        		x--, y--;
        		if(dist[x][y] > d) dist[x][y] = dist[y][x] = d;
    		}
    		dijkstra(0);
    		if(line[n-1] < INF) printf("%d
    ", line[n-1]);
    		else printf("-1
    ");
    	}
        return 0;  
    }
    
  • 相关阅读:
    cookie
    iOS本地推送
    2020-06-17:红锁的设计思想?
    2020-06-16:Redis hgetall时间复杂度?
    2020-06-15:Redis分布式锁怎么解锁?
    2020-06-14:Redis怎么实现分布式锁?
    2020-06-13:Redis底层数据结构?
    2020-06-12:推箱子自动求解。
    2020-06-11:Redis支持的数据类型?
    2020-06-10:给定一个无序数组,里面数都是成双数的,只有一个数是成单数的,求这个数? 来自
  • 原文地址:https://www.cnblogs.com/HackHarry/p/8403697.html
Copyright © 2011-2022 走看看