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

最少换乘

题解 : 给你几班车 , 主人公想从 1 到 N 问你需要 换乘几辆车 ?    对于这种 有去无回的 图 , 不需要做特殊处理 .

 1 #include<stdio.h>
 2 #include<string.h>
 3 #include<math.h>
 4 #include<iostream>
 5 #include<limits.h>
 6 #include<algorithm>
 7 #include<queue>
 8 #include<vector>
 9 #include<set>
10 #include<stack>
11 #include<string>
12 #include<sstream>
13 #include<map>
14 #include<cctype>
15 using namespace std;      //最少换乘  ,  由于是单源最短路径的求解 还是不用 Floyd 了 , 以免超时 , 而且已经证明这一道题上  Floyd是 Dijkstra的 100倍
16 int visited[505],dis[505],a[505][505];
17 int Dijkstra(int n)
18 {
19     for(int i=1;i<=n;i++)       //  将 和 1   连接 , 的储存到dis中
20         dis[i]=a[1][i];
21     dis[1]=0;
22     visited[1]=1;
23     for(int i=1;i<=n;i++)   // 一共有 七个站点
24     {
25         int v,minn=INT_MAX;
26         for(int j=1;j<=n;j++)
27         {
28             if(minn>dis[j]&&!visited[j])
29             {
30                 minn=dis[j];
31                 v=j;
32             }
33         }
34         visited[v]=1;
35         for(int j=1;j<=n;j++)
36         {
37             if(!visited[j]&&a[v][j]!=INT_MAX&&dis[v]!=INT_MAX&&dis[j]>dis[v]+a[v][j])        //  用  INT_MAX的 话存在一个问题就是只要一 + 就从最大值变成最小值 所以   用INT_MAX的话 需要谨慎对待相加问题
38             {
39                 dis[j]=dis[v]+a[v][j];
40             }
41         }
42     }
43     return dis[n];
44 }
45 int main()
46 {
47     int t,n,m;
48     string road;
49     scanf("%d",&t);
50     while(t--)
51     {
52         scanf("%d%d",&m,&n);
53         for(int i=0;i<=n;i++)
54         {
55             dis[i]=INT_MAX;
56             for(int j=0;j<=n;j++)
57                 a[i][j]=INT_MAX;
58         }
59         memset(visited,0,sizeof(visited));
60         if(t!=0)
61             getchar();
62         for(int i=0;i<m;i++)
63         {
64             int sum=0;
65             getline(cin,road);   // 第一行数据
66             int q=0;
67             for(int j=0;j<road.size();j++)
68             {
69                 if(road[j]==' ')
70                 {
71                     dis[q++]=sum;
72                     sum=0;
73                     continue;
74                 }
75                 sum=sum*10+road[j]-'0';
76             }
77             dis[q++]=sum;
78             for(int w=0;w<q;w++)
79                 for(int j=w+1;j<q;j++)
80                 a[dis[w]][dis[j]]=1;   //  一路车的 换乘次数就是 1 .   在每个 可以直接到达的地方 都是 1 , 如果需要倒车的话 在 +1
81         }
82         int e=Dijkstra(n);
83         if(e==INT_MAX)
84             printf("NO\n");
85         else
86             printf("%d\n",e-1);
87     }
88     return 0;
89 }

 

转载于:https://www.cnblogs.com/A-FM/p/5386737.html

相关文章:

  • rpm命令使用总结
  • 学习ios【1】Objective-C 基本语法
  • Mac使用大全
  • JSONArray转ListT
  • 遥感影像显示相关的技术总结
  • 2016.04.8-2016.04.14这周工作时间和内容
  • Kafka常用操作
  • Scalaz(34)- Free :算法-Interpretation
  • 思科4500系列与华为9300系列交换机介绍与选配
  • Java超时控制的实现
  • HeadFirst设计模式(三) - 装饰者模式
  • PHP基本语法
  • linux下无法删除文件的原因
  • Python学习(18)面向对象
  • 神经网络学习入门 -01
  • 《用数据讲故事》作者Cole N. Knaflic:消除一切无效的图表
  • 【JavaScript】通过闭包创建具有私有属性的实例对象
  • Android开源项目规范总结
  • Android系统模拟器绘制实现概述
  • angular2开源库收集
  • const let
  • Cookie 在前端中的实践
  • css属性的继承、初识值、计算值、当前值、应用值
  • Essential Studio for ASP.NET Web Forms 2017 v2,新增自定义树形网格工具栏
  • Intervention/image 图片处理扩展包的安装和使用
  • JavaScript标准库系列——Math对象和Date对象(二)
  • Java方法详解
  • JS变量作用域
  • JS基础篇--通过JS生成由字母与数字组合的随机字符串
  • Zepto.js源码学习之二
  • 阿里云应用高可用服务公测发布
  • 第三十一到第三十三天:我是精明的小卖家(一)
  • 复习Javascript专题(四):js中的深浅拷贝
  • 面试题:给你个id,去拿到name,多叉树遍历
  • 微信端页面使用-webkit-box和绝对定位时,元素上移的问题
  • 无服务器化是企业 IT 架构的未来吗?
  • 白色的风信子
  • Java数据解析之JSON
  • Linux权限管理(week1_day5)--技术流ken
  • Redis4.x新特性 -- 萌萌的MEMORY DOCTOR
  • "无招胜有招"nbsp;史上最全的互…
  • #LLM入门|Prompt#2.3_对查询任务进行分类|意图分析_Classification
  • #我与Java虚拟机的故事#连载09:面试大厂逃不过的JVM
  • (1)(1.19) TeraRanger One/EVO测距仪
  • (70min)字节暑假实习二面(已挂)
  • (libusb) usb口自动刷新
  • (第61天)多租户架构(CDB/PDB)
  • (附源码)springboot课程在线考试系统 毕业设计 655127
  • (附源码)小程序儿童艺术培训机构教育管理小程序 毕业设计 201740
  • (五)Python 垃圾回收机制
  • (转)关于多人操作数据的处理策略
  • .bat批处理(十):从路径字符串中截取盘符、文件名、后缀名等信息
  • .NET Core MongoDB数据仓储和工作单元模式封装
  • .Net MVC4 上传大文件,并保存表单
  • .Net 代码性能 - (1)