合理宣泄下:太久没做题了,脑子锈了~然后拿到题,莫名大脑空白了10分钟,再接着看懂了题目,但就是不晓得怎么下手。所以就计划边写边想(至少把输入,主函数什么的敲进去),但是!!!不晓得是按错了Tab键还是什么,竟然交卷了,心塞的不行~~


题目:

*光明小学的小朋友们要举行一年一度的接力跑大赛了,但是小朋友们却遇到了一个难题:设计接力跑大赛的线路,你能帮助他们完成这项工作么?
 *光明小学可以抽象成一张有N个节点的图,每两点间都有一条道路相连。光明小学的每个班都有M个学生,所以你要为他们设计出一条恰好经过M条边的路径。
 *光明小学的小朋友们希望全盘考虑所有的因素,所以你需要把任意两点间经过M条边的最短路径的距离输出出来以供参考。
 *
 *你需要设计这样一个函数:
 *res[][] Solve( N, M, map[][]);
 *注意:map必然是N * N的二维数组,且map[i][j] == map[j][i],map[i][i] == 0,-1e8 <= map[i][j] <= 1e8。
 *(道路全部是无向边,无自环)2 <= N <= 100, 2 <= M <= 1e6。
 *
 *map数组表示了一张稠密图,其中任意两个不同节点i,j间都有一条边,边的长度为map[i][j]。N表示其中的节点数。
 *你要返回的数组也必然是一个N * N的二维数组,表示从i出发走到j,经过M条边的最短路径
 *你的路径中应考虑包含重复边的情况。


*输入样例:

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

输出样例:

[[4, 4, 3],

[4, 2, 5],

[3, 5, 2]]


分析:该问题是无向图,题目自己都说明了。总共n个点,可以从任一点出发;每一个出发点,每次可以到达除了自身的所有点;最多可以走m次,(走表示从一个点到另一个点)。根据个人爱好,我喜欢把图画成树,因为每个点都可以作为出发点,那么就是n棵树,为了方便,自定义一个根节点连接到n棵树,这样就变成了1棵树。目的就是求,从根节点出发到叶子节点的所有可能路径,如果某些路径的起始点和终点都一样,那么我们只记录距离最短的那条。

依据题目给出的样例,可以根据下图理解上面的分析(左图为截取其他同学的分享(原题目内容),右图为树结构)


代码如下:(深度遍历树)对输入输出做了改动,具体看代码后贴出的输入,输出

import java.util.Arrays;
import java.util.Scanner;
public class DFS {public static void main(String[] args) {Scanner in = new Scanner(System.in);int n = in.nextInt();int m = in.nextInt();int[][] map = new int[n][n];for(int i=0;i<n;i++) {for(int j=0;j<n;j++) {map[i][j] = in.nextInt();}}int[][] res = new int[n][n];//用来存储结果,初始化为最大值for(int i=0;i<n;i++) {for(int j=0;j<n;j++) {res[i][j] = Integer.MAX_VALUE;}}int[] s = new int[m+2];s[0]=n;solve(n,m,1,n,s,map,res);for(int i=0;i<res.length;i++) {System.out.println(Arrays.toString(res[i]));}}/** 思路:把问题构造成一棵树,先深度遍历获取分支并存储* 根据存储的分支,计算路径长度,做出处理*/public static void solve(int n,int m,int t,int root,int[] s,int[][] map,int[][] res){//输入:t:表示从第几层开始遍历,root:表示当前所在结点,s:用来存遍历得到的分支if(t==(m+2)) {int sum=0;for(int j=1;j<s.length-1;j++) {sum += map[s[j]][s[j+1]];}if(sum<res[s[1]][s[m+1]])res[s[1]][s[m+1]] = sum;//System.out.println(Arrays.toString(s));//输出从根到叶的一条支路}else {int[] arr = find(n,root);for(int i=0;i<arr.length;i++) {s[t] = arr[i];solve(n,m,t+1,arr[i],s,map,res);}}}public static int[] find(int n,int root) {//根据当前结点获取它能到达的所有子树的根int[] arr;if(root==n) {arr = new int[n];for(int i=0;i<n;i++) {arr[i] = i;}}else {arr = new int[n-1];int t = 0;for(int i=0;i<n;i++) {if(i==root) continue;arr[t] = i;t++;}}return arr;}
}
/*
输入:
3
2
0 2 3
2 0 1
3 1 0
输出:
[4, 4, 3]
[4, 2, 5]
[3, 5, 2]
*/

参考:图片来源于

http://www.cnblogs.com/Oscar67/p/9366689.html

2019阿里校招测评——光明小学接力赛(Java)相关推荐

  1. 2019阿里校招测评题,光明小学完全图最短路径问题

    光明小学的小朋友们要举行一年一度的接力跑大赛了,但是小朋友们却遇到了一个难题:设计接力跑大赛的线路,你能帮助他们完成这项工作么? 光明小学可以抽象成一张有N个节点的图,每两点间都有一条道路相连.光明小 ...

  2. 2019阿里校招测评题 光明小学完全图最短路径问题

    题目: 光明小学的小朋友们要举行一年一度的接力跑大赛了,但是小朋友们却遇到了一个难题:设计接力跑大赛的线路,你能帮助他们完成这项工作么? 光明小学可以抽象成一张有N个节点的图,每两点间都有一条道路相连 ...

  3. 2019阿里校招测评题(编程)

    明小学的小朋友们要举行一年一度的接力跑大赛了,但是小朋友们却遇到了一个难题:设计接力跑大赛的线路,你能帮助他们完成这项工作么? 光明小学可以抽象成一张有N个节点的图,每两点间都有一条道路相连.光明小学 ...

  4. 2019阿里校招测评题 物流派送员最短路径问题

    题目: 解题思路: 还是尝试用全排列先去求个解出来,把所有可能的路径都求出来,找出最短的那个. 但是感觉用启发式算法效果会更好,尝试使用两元素优化求解. 代码实现: 全排列版本: public cla ...

  5. 2019阿里校招面试【前端】(一)

    2019阿里校招面试一面(前端) 问题: 项目里面遇到的困难 promise请求失败如何返回原来页面 call/apply/bind 数组中找某个元素的方法和时间复杂度 前端工程化 继承的方式 跨域 ...

  6. python笔试题奥特曼打怪兽_2019阿里校招测评题,光明小学完全图最短路径问题(python实现)...

    题目:光明小学的小朋友们要举行一年一度的接力跑大赛了,但是小朋友们却遇到了一个难题:设计接力跑大赛的线路,你能帮助他们完成这项工作么? 光明小学可以抽象成一张有N个节点的图,每两点间都有一条道路相连. ...

  7. 2019阿里校招数据研发/算法工程师 hr面

    2018-08-22更:下午6点接到hr电话,进行了25min左右的面试 主要问题如下: 1.你是控制专业,我不是很了解控制专业,你能大概给我讲解一下吗?并且告诉我这两天还要加面一轮交叉面,不知道是为 ...

  8. 2019阿里校招面试【前端】(四)他山之石

    热乎乎的面经啦!突然接到飞猪的电话,脑子懵懵的.哈哈.第一次面试,有点紧张. 直接进入正题! 自我介绍 讲一下项目(简直爆炸) let和const的区别(const声明必须直接赋值) const声明的 ...

  9. 腾讯、阿里校招面试真题-常见经典题

    [腾讯]2018暑期实习面试题 题目地址: 求最大子数组和 https://leetcode.com/problems/maximum-subarray/ 解题思路: 数组表示为nums[0,1,.. ...

最新文章

  1. inode客户端连接成功上不了网_wifi连接上但上不了网怎么回事
  2. Linux 下 Redis 安装教程
  3. 【剑指offer】面试题05:替换空格(java)
  4. 内部类及静态内部类的实例化
  5. 怎么做数据可视化大屏?从设计到上线,一般用这3类工具
  6. 移动端动画使用transform提升性能
  7. db PowerDesigner如何将消失的工具栏显示出来
  8. 非合作博弈篇——混合策略博弈(mixed strategy)
  9. 这样设计算机屏幕保护,屏幕保护程序怎么设置图文教程
  10. 【泛函】线性算子的谱论(数学知识用程序表达轻松学系列)
  11. 第13届景驰-埃森哲杯广东工业大学ACM程序设计大赛(上)
  12. 使用element插件中Descriptions遇到的坑
  13. 计算机无法添加无线网络,Win7电脑无法连接无线网络的原因和处理方法
  14. 机器学习之概率论与数理统计基础知识-(2)随机变量和数字特征
  15. 74HC138三八译码器的应用
  16. 虾皮春节期间的发货问题和物流设置
  17. java 刷新文件夹 代码_UpdateFile.java(更新指定文件夹的文件)作者:阿飞
  18. Google Earth Engine(GEE)——逐月降水数据下载和直方图表展示
  19. 内蒙古农业大学职业技术学院——数据结构—第一课
  20. 海店湾:不尊重质量,就如同自掘坟墓,无印良品,真的要凉凉了!

热门文章

  1. 刘翔跟着崔健孤独地飞了
  2. 按QQ查询QQ群数据库的方法
  3. BIM、GIS、CIM等技术共同助力数字孪生城市的建设
  4. python异或^ 移位运算符
  5. STM32-24位AD7799驱动之手册代码详解,支持模拟SPI和硬件SPI
  6. VB基础版版务处理_20050626
  7. 【windows】win7 sp1 系统语言中英文切换
  8. 数字IC前端学习笔记:LSFR(线性反馈移位寄存器)
  9. Linux同时开启tcp_tw_recycle和tcp_timestamps导致TCP syn有时不响应故障排查
  10. cad计算机系统安装教程视频,CAD怎么在64位电脑上安装教程视频