当前位置: 首页 > news >正文

[2544]最短路 (两种算法)(HDU)

                                                                               最短路

Time Limit: 5000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 32771    Accepted Submission(s): 14253


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

 

Input
输入包括多组数据。每组数据第一行是两个整数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条商店到赛场的路线。
 

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

Sample Input

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

Sample Output

  
3 2
 

算法一:
Dijkstra算法
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define inf 9999999
int ma[110][110];
int dis[110];
int vis[110];
int n,m;
void dijk(int s,int f)
{
    memset(vis,0,sizeof(vis));
    int i,j,pos;
    int min1;
    for(i=1;i<=n;i++)
       dis[i]=ma[s][i];
    vis[s]=1;
    for(i=1;i<n;i++)
    {
        min1=inf;
        for(j=1;j<=n;j++)
        {
            if(!vis[j]&&dis[j]<min1)
            {
                min1=dis[j];
                pos=j;
            }
        }
        vis[pos]=1;
        for(j=1;j<=n;j++)
        {
            if(!vis[j]&&dis[j]>dis[pos]+ma[pos][j])//算法关键
                dis[j]=dis[pos]+ma[pos][j];
        }
    }
    if(dis[f]!=inf)
        printf("%d\n",dis[f]);
    else
        puts("-1");
}
int main()
{
    int i,j;
    int x,y,z;
    while(scanf("%d %d",&n,&m),n)
    {
        for(i=1;i<=n;i++)
        {
            for(j=1;j<=n;j++)
            {
                ma[i][j]=inf;
                if(i==j)
                    ma[i][j]=0;
            }
        }
        for(i=0;i<m;i++)
        {
            scanf("%d %d %d",&x,&y,&z);
            if(ma[x][y]>z)
            {
                ma[x][y]=z;
                ma[y][x]=z;
            }
        }
         dijk(1,n);
    }
    return 0;
}

算法二:
Flord算法:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define inf 999999
int ma[110][110];
int s,e;
int n,m;
void flord()
{
   s=1;
   e=n;
   int i,k,j;
   for(k=1;k<=n;k++)
    for(i=1;i<=n;i++)
      for(j=1;j<=n;j++)
      if(ma[i][k]!=inf&&ma[k][j]!=inf&&ma[i][j]>ma[i][k]+ma[k][j])//算法关键
                  ma[i][j]=ma[i][k]+ma[k][j];
   if(ma[s][e]!=inf)
    printf("%d\n",ma[s][e]);
   else
    printf("-1\n");
}
int main()
{
    int i,j;
    int x,y,z;
    while(scanf("%d %d",&n,&m),n)
    {
        for(i=1; i<=n; i++)
        {
            for(j=1; j<=n; j++)
            {
                ma[i][j]=inf;
                if(i==j)
                    ma[i][j]=0;
            }
        }
        for(i=0; i<m; i++)
        {
           scanf("%d %d %d",&x,&y,&z);
           if(ma[x][y]>z)
           {
               ma[x][y]=z;
               ma[y][x]=z;
           }
        }
        flord();
    }
    return 0;
}



转载于:https://www.cnblogs.com/jiangyongy/p/3971611.html

相关文章:

  • Spring整合Quartz在Linux下定时器被调用两次
  • 8月第3周中国五大顶级域名增5.7万 美国减4.2万
  • 用cubieboard做示波器
  • STL标准容器类简介
  • 如何建设云数据中心
  • 执行计划中常见index访问方式(转)
  • 下一代Asp.net开发规范OWIN(1)—— OWIN产生的背景以及简单介绍
  • Sql语句执行顺序
  • Eclipse Java注释模板设置详解
  • 利用泛型减少Dao方法的数量
  • curl 浏览器模拟请求实战
  • 【BZOJ】1673: [Usaco2005 Dec]Scales 天平(dfs背包)
  • BM和KMP字符串匹配算法学习
  • MySql数据库3【优化1】表的优化
  • PHP学习路线图
  • (十五)java多线程之并发集合ArrayBlockingQueue
  • JavaScript类型识别
  • Java多线程(4):使用线程池执行定时任务
  • MQ框架的比较
  • Python十分钟制作属于你自己的个性logo
  • Web标准制定过程
  • 表单中readonly的input等标签,禁止光标进入(focus)的几种方式
  • 分享自己折腾多时的一套 vue 组件 --we-vue
  • 排序算法学习笔记
  • 浅析微信支付:申请退款、退款回调接口、查询退款
  • 如何邀请好友注册您的网站(模拟百度网盘)
  • 我是如何设计 Upload 上传组件的
  • 学习使用ExpressJS 4.0中的新Router
  • 这几个编码小技巧将令你 PHP 代码更加简洁
  • 7行Python代码的人脸识别
  • # Swust 12th acm 邀请赛# [ K ] 三角形判定 [题解]
  • #vue3 实现前端下载excel文件模板功能
  • (12)目标检测_SSD基于pytorch搭建代码
  • (16)Reactor的测试——响应式Spring的道法术器
  • (4)Elastix图像配准:3D图像
  • (二)pulsar安装在独立的docker中,python测试
  • (附程序)AD采集中的10种经典软件滤波程序优缺点分析
  • (学习日记)2024.04.04:UCOSIII第三十二节:计数信号量实验
  • (轉貼)《OOD启思录》:61条面向对象设计的经验原则 (OO)
  • .NET BackgroundWorker
  • .net core使用RPC方式进行高效的HTTP服务访问
  • .NET Standard 支持的 .NET Framework 和 .NET Core
  • .NET 自定义中间件 判断是否存在 AllowAnonymousAttribute 特性 来判断是否需要身份验证
  • .net的socket示例
  • @Responsebody与@RequestBody
  • [1159]adb判断手机屏幕状态并点亮屏幕
  • [codeforces] 25E Test || hash
  • [Erlang 0129] Erlang 杂记 VI 2014年10月28日
  • [LeetCode] Wildcard Matching
  • [Linux] CE知识随笔含Ansible、防火墙、VIM、其他服务
  • [Luogu 3958] NOIP2017 D2T1 奶酪
  • [MT8766][Android12] 增加应用安装白名单或者黑名单
  • [Node.js]连接mongodb
  • [NOI2005]聪聪与可可(期望)
  • [NOI2014]购票