P1346 电车
题目描述
在一个神奇的小镇上有着一个特别的电车网络,它由一些路口和轨道组成,每个路口都连接着若干个轨道,每个轨道都通向一个路口(不排除有的观光轨道转一圈后返回路口的可能)。在每个路口,都有一个开关决定着出去的轨道,每个开关都有一个默认的状态,每辆电车行驶到路口之后,只能从开关所指向的轨道出去,如果电车司机想走另一个轨道,他就必须下车切换开关的状态。
为了行驶向目标地点,电车司机不得不经常下车来切换开关,于是,他们想请你写一个程序,计算一辆从路口A到路口B最少需要下车切换几次开关。
输入输出格式
输入格式:
第一行有3个整数2<=N<=100,1<=A,B<=N,分别表示路口的数量,和电车的起点,终点。
接下来有N行,每行的开头有一个数字Ki(0<=Ki<=N-1),表示这个路口与Ki条轨道相连,接下来有Ki个数字表示每条轨道所通向的路口,开关默认指向第一个数字表示的轨道。
输出格式:
输出文件只有一个数字,表示从A到B所需的最少的切换开关次数,若无法从A前往B,输出-1。
输入输出样例
3 2 1
2 2 3
2 3 1
2 1 2
0
一种很好的stl:双向队列,可以同时从队列的前/后 删除/添加元素
思路:似乎有一点类似bfs的spfa,每一次到达一个点,将不用切换开关就能到达的点从队首入队,需要用开关的点从队尾入队。
因为有可能有的点可以由多次不换开关到达而此时的花费小于经过一次変换,所以不能保证队中的点都是最优解,不能当B在队列中出现过就确定B的最优解出现,需要当B成为队首后才能确定A到B的最优解
#include<iostream>
#include<stdio.h>
#include<deque>
#include<cstring>
using namespace std;
deque<int> q;
int i,m,n,j,k[101],a[101][101],s,t,e;
int main()
{
memset(k,0x3f,sizeof(k));
scanf("%d%d%d",&n,&s,&t);
for(i=1;i<=n;i++)
{
scanf("%d",&a[i][0]);
for(j=1;j<=a[i][0];j++) scanf("%d",&a[i][j]);
}
q.push_back(s);
k[s]=0;
while(q.size())
{
e=q.front();
q.pop_front();
if(e==t)
{
printf("%d",k[t]);
return 0;
}
if(k[a[e][1]]>k[e])
{
q.push_front(a[e][1]);
k[a[e][1]]=k[e];
}
for(i=2;i<=a[e][0];i++)
{
if(k[a[e][i]]>k[e]+1)
{
q.push_back(a[e][i]);
k[a[e][i]]=k[e]+1;
}
}
}
printf("-1");
}
P1346 电车的更多相关文章
- [最短路][模版]P1346 电车
题目描述 在一个神奇的小镇上有着一个特别的电车网络,它由一些路口和轨道组成,每个路口都连接着若干个轨道,每个轨道都通向一个路口(不排除有的观光轨道转一圈后返回路口的可能).在每个路口,都有一个开关决定 ...
- 洛谷——P1346 电车
P1346 电车 题目描述 在一个神奇的小镇上有着一个特别的电车网络,它由一些路口和轨道组成,每个路口都连接着若干个轨道,每个轨道都通向一个路口(不排除有的观光轨道转一圈后返回路口的可能).在每个路口 ...
- P1346 电车(dijkstra)
P1346 电车 题目描述 在一个神奇的小镇上有着一个特别的电车网络,它由一些路口和轨道组成,每个路口都连接着若干个轨道,每个轨道都通向一个路口(不排除有的观光轨道转一圈后返回路口的可能).在每个路口 ...
- 洛谷P1346 电车
P1346 电车 236通过 757提交 题目提供者yeszy 标签图论福建省历届夏令营 难度普及/提高- 提交该题 讨论 题解 记录 最新讨论 解不好啊,快疯了!!哪位大… 求解:为何除了-1的点之 ...
- 洛谷P1346 电车【最短路】
题目:https://www.luogu.org/problemnew/show/P1346 题意:n个路口,每个路口有好几条轨道,默认指向给出的第一个路口. 如果要换到另外的轨道去需要按一次开关.问 ...
- 洛谷 - P1346 - 电车 - Dijkstra/01BFS
https://www.luogu.org/problem/P1346 使用最短路之前居然忘记清空了. #include<bits/stdc++.h> using namespace st ...
- 洛谷 P1346 电车——dijstra
上一波题目 https://www.luogu.org/problem/P1346 是道水题 路口一开始对着的那条路权值为0 其余路权值为1 然后跑一遍最短路就好了 qwq #include<c ...
- 洛谷P1346 电车(需要稍加思索的最短路)
题目描述 在一个神奇的小镇上有着一个特别的电车网络,它由一些路口和轨道组成,每个路口都连接着若干个轨道,每个轨道都通向一个路口(不排除有的观光轨道转一圈后返回路口的可能).在每个路口,都有一个开关决定 ...
- 洛谷 P1346 电车
这道题的关键在建图 把每一个车站看成一个点,将这个车站相连的第一个车站建立一条边权为0的边,对于它所相连的其他车站,建立边权为1的边: 这样我们可以得到一张图: 起点,终点都知道了,跑一边最短路即可 ...
随机推荐
- Pnel控件
分组类控件 面板控件(Panel) 分组框控件(GroupBox) 选项卡控件(TabControl)等控件 Panel 控件是由System.Windows.Forms.Panel类提供的,主要 ...
- Knockout.js hasFocus
<head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8&quo ...
- WPF几种渐变色
[LinearGradientBrush-- 主要属性: StartPoint 获取或设置线性渐变的二维起始坐标. EndPoint 获取或设置线性渐变的二维终止坐标. 例子: <Linea ...
- 如鹏网学习笔记(九)JavaScript
JavaScript笔记 一.JavaScript简介 1,JavaScript是一种计算机编程语言,可以像等其他编程语言那样定义变量,执行循环等. 2,JavaScript代码主要执行在浏览器上,为 ...
- git 命令合并分支代码
git 命令合并分支代码 对于复杂的系统,我们可能要开好几个分支来开发,那么怎样使用git合并分支呢? 合并步骤: 1.进入要合并的分支(如开发分支合并到master,则进入master目录) git ...
- JSP9大内置对象
JSP9大内置对象 JSP9个内置对象:out对象 用于输出各种数据reuest对象 封装了来自客户端的各种信息response对象 封装了服务器的响应信息exception对象 封装了程序运行过程中 ...
- IDEA使用maven建web项目示例
运行环境:OSX-10.13.3. IDEA-2017.3.3. maven-3.5.2 步骤1:选择maven-webapp模板新建web项目 步骤2:设置项目GroupId等 需从网上下载相关构件 ...
- js 控制页面跳转的5种方法
js 控制页面跳转的5种方法 编程式导航: 点击跳转路由,称编程式导航,用js编写代码跳转. History是bom中的 History.back是回退一页 Histiory.go(1)前进一页 Hi ...
- MySQL order null 0 - 把null和0(零)排在最后
1.一般的order by 语句其返回的结果为 SELECT `vcenter_ip`, `status`, `sla_id` FROM vm_list ORDER BY sla_id ASC; 2. ...
- leetcode Ch6-Data Structure
1. Sliding Window Maximum class Solution { public: vector<int> maxSlidingWindow(vector<int& ...