算法|计算让汽车路程最近有多少种方法

简介: 算法|计算让汽车路程最近有多少种方法

问题描述

我们现在有一个问题,如下图:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

这里有16个节点,我们的汽车从起始点节点1出发,到终点节点16,现在相邻的两个节点距离都是相同的,汽车只能走上下左右四个方向(不可以斜着走),我们要求的汽车到终点距离最短的情况下共有多少种方式可以到达终点。

解决方案

首先我们先来观察这个4*4的正方形地图,由于相邻两个节点之间的距离是相同的。我们可以根据矩形的一些性质的出,汽车从节点1开始,只往右走和只往下走,最终到达节点16的所有方法的距离是相同并且最短的。那么我们如何得知一共可以有多少种方法呢?

我们可以把复杂问题简单化,找找有没有什么规律(我们只求最短路程的)。

1

比如只有一个节点的时候,到达终点的方法就只有一种。

1

2

当有两个节点的时候,还是只有一种方法。当两个节点这样放也是一样的。

1

2

我们继续增加节点:

1

2

3

4

当有4个节点的时候,到达终点的方式就有2种(默认左上角为起点,右下角为终点)。

1

2

3

4

5

6


1

2

3

4

5

6

再来看看这两种,第一种我们可以1到2或者1到4。如果1到2,那么到2之后就有的到了2*2的地图,2*2的地图我们也算出有2种方式到达终点因此,2*3的地图很容易就得到有3种方法到达终点。第二中也是一样,1到3之后就是2*2的地图。由此可见,我们可以将这种地图看成一张二维表,我们每走一个节点,剩下的地图就更简单。因此我们也可以从简单慢慢到复杂的。接下来我用二维表来表示一下(节点中的数字代表起点到达这里有几种方法是路程最短)。

1

1

1

1

1

2

3

4

1

3

6

10

1

4

10

20

我们将二维表从1*1慢慢增大到4*4,并且我们发现每一个节点的数字都等于它自己上面的节点的数字加上左边的节点的数字。由此可见,任何一个二维表给我们,我们都可以用这种方法的到起点到终点的所有路程最短的方法的数量。

我们在代码中可以使用递归的方法来完成我们刚刚分析出来的所有计算步骤。

 

我们将二维表的横坐标和纵坐标作为参数,结果为上面的坐标的方法数加上左边的坐标的方法数。如此结果就得到我们想要的答案。

结语

将复杂的问题简单化分析,有简单到复杂的解决问题,一步一步的找到解题的规律,最后得到答案。

目录
相关文章
|
1月前
|
存储 算法 Java
解析HashSet的工作原理,揭示Set如何利用哈希算法和equals()方法确保元素唯一性,并通过示例代码展示了其“无重复”特性的具体应用
在Java中,Set接口以其独特的“无重复”特性脱颖而出。本文通过解析HashSet的工作原理,揭示Set如何利用哈希算法和equals()方法确保元素唯一性,并通过示例代码展示了其“无重复”特性的具体应用。
41 3
|
1月前
|
存储 分布式计算 算法
大数据-106 Spark Graph X 计算学习 案例:1图的基本计算、2连通图算法、3寻找相同的用户
大数据-106 Spark Graph X 计算学习 案例:1图的基本计算、2连通图算法、3寻找相同的用户
60 0
|
1月前
|
算法 索引
HashMap扩容时的rehash方法中(e.hash & oldCap) == 0算法推导
HashMap在扩容时,会创建一个新数组,并将旧数组中的数据迁移过去。通过(e.hash & oldCap)是否等于0,数据被巧妙地分为两类:一类保持原有索引位置,另一类索引位置增加旧数组长度。此过程确保了数据均匀分布,提高了查询效率。
38 2
|
1月前
|
JSON 算法 数据可视化
测试专项笔记(一): 通过算法能力接口返回的检测结果完成相关指标的计算(目标检测)
这篇文章是关于如何通过算法接口返回的目标检测结果来计算性能指标的笔记。它涵盖了任务描述、指标分析(包括TP、FP、FN、TN、精准率和召回率),接口处理,数据集处理,以及如何使用实用工具进行文件操作和数据可视化。文章还提供了一些Python代码示例,用于处理图像文件、转换数据格式以及计算目标检测的性能指标。
59 0
测试专项笔记(一): 通过算法能力接口返回的检测结果完成相关指标的计算(目标检测)
|
1月前
|
搜索推荐 Shell
解析排序算法:十大排序方法的工作原理与性能比较
解析排序算法:十大排序方法的工作原理与性能比较
51 9
|
1月前
|
存储 算法 Java
数据结构与算法学习八:前缀(波兰)表达式、中缀表达式、后缀(逆波兰)表达式的学习,中缀转后缀的两个方法,逆波兰计算器的实现
前缀(波兰)表达式、中缀表达式和后缀(逆波兰)表达式的基本概念、计算机求值方法,以及如何将中缀表达式转换为后缀表达式,并提供了相应的Java代码实现和测试结果。
51 0
数据结构与算法学习八:前缀(波兰)表达式、中缀表达式、后缀(逆波兰)表达式的学习,中缀转后缀的两个方法,逆波兰计算器的实现
|
3月前
|
JavaScript 算法 前端开发
JS算法必备之String常用操作方法
这篇文章详细介绍了JavaScript中字符串的基本操作,包括创建字符串、访问特定字符、字符串的拼接、位置查找、大小写转换、模式匹配、以及字符串的迭代和格式化等方法。
JS算法必备之String常用操作方法
|
3月前
|
JavaScript 算法 前端开发
JS算法必备之Array常用操作方法
这篇文章详细介绍了JavaScript中数组的创建、检测、转换、排序、操作方法以及迭代方法等,提供了数组操作的全面指南。
JS算法必备之Array常用操作方法
|
3月前
|
搜索推荐 算法 Java
现有一个接口DataOperation定义了排序方法sort(int[])和查找方法search(int[],int),已知类QuickSort的quickSort(int[])方法实现了快速排序算法
该博客文章通过UML类图和Java源码示例,展示了如何使用适配器模式将QuickSort类和BinarySearch类的排序和查找功能适配到DataOperation接口中,实现算法的解耦和复用。
40 1
现有一个接口DataOperation定义了排序方法sort(int[])和查找方法search(int[],int),已知类QuickSort的quickSort(int[])方法实现了快速排序算法
|
2月前
|
算法 C++
如何精确计算出一个算法的CPU运行时间?
如何精确计算出一个算法的CPU运行时间?