城市换乘线路问题
来源:互联网 发布:java简单学生管理系统 编辑:程序博客网 时间:2024/04/29 09:19
华为机试
设有 n 个城市, 编号为 0 ~ n - 1, m 条单向航线的七点和终点由输入提供, 寻找一条换乘次数最少的线路方案。
输入为 第一行 三个整数 n, m, v 表示城市数, 单项航线数 和起点城市。 以下 m 行每行两个整数,
表示一条边的起点和终点。
输出 共 n - 1 行, 分别是从起点城市 v 到其他 n - 1 个城市最少换乘次数, 按照城市序号从小到大顺序输出, 不能抵达时输出 -1
样例输入
3 2 0
0 1
1 2
样例输出
1
2
样例输入
4 4 0
0 1
1 2
1 3
2 1
样例输出
1
2
2
思路:
用一个二维数组构建城市之间的航线 例如 城市0 到其他城市的航线保存在 line[0] 中,然后深度优先遍历
#include<iostream>#include<vector>#include<algorithm>using namespace std;vector <vector<int> >res; //找寻目标城市,若找到,则把路线保存进res中void findLine(vector<vector<int> > line, vector<int> temp, int v, int dst) { if (v == dst) { temp.push_back(v); res.push_back(temp); return; } temp.push_back(v); for (int i = 0; i < line[v].size(); ++i) { //已经经过的城市就直接忽略 if(find(temp.begin(), temp.end(), line[v][i]) == temp.end()) findLine(line, temp, line[v][i], dst); }}void main() { int n, m, v; while (cin >> n >> m >> v) { vector<vector<int> > line(n); for (int i = 0; i < m; ++i) { int a, b; cin >> a >> b; line[a].push_back(b); } for (int i = 0; i < n; ++i) { if (i == v) continue; //遍历各个航线 for (int j = 0; j < line[v].size(); ++j) { vector<int> temp; findLine(line, temp, line[v][j], i); } if (res.size() > 0) { //找到最短航线 int min = res[0].size(); for (int i = 1; i < res.size(); ++i) { if (res[i].size() < min) min = res[i].size(); } cout << min << endl; res.clear(); } else cout << -1 << endl; } }}
0 0
- 城市换乘线路问题
- 地铁换乘的线路问题
- 华为上机考试样题三----地铁线路换乘问题
- 用SQL进行地铁线路换乘查询
- 公交换乘算法问题
- 蓝桥杯地铁换乘问题
- 华为地铁换乘问题
- 最佳飞机换乘线路查询系统的实现
- 公交换乘问题---java解决方案
- 飞机最少换乘次数问题
- 飞机最少换乘次数问题
- 线路问题影响FTP
- 电话线路有问题
- 城市问题
- 城市问题
- 城市问题
- 城市问题
- 城市问题
- 检测一个字符串是否为一个有效的编码格式字符串
- 我是进击的码农4
- LeetCode - 86. Partition List
- Retrofit2.0 完美同步Cookie实现免登录
- Java IO字节流操作及实现记事本Application小程序
- 城市换乘线路问题
- Android_Bitmap_图片的二次采样并生成缩略图
- 关于自定义UIControl
- scrapy-redis分布式爬虫原理分析
- Mysql 复制一条数据
- PHPstrom2016.1激活与汉化【2016.06.21依旧可用】
- 【工具】win10打开telnet功能
- 各种音视频编解码学习详解
- Java - Set和存储顺序