一、题目描述
有M*N的节点矩阵,每个节点可以向8个方向(上下左右及四个斜线防线)转发数据包,每个节点转发时会消耗固定时延,连续两个相同时延可以减少一个时延值(即当有K个相同时延的节点连续转发时可以减少K-1个时延值),求左上角(0,0)开始转发数据包到右下角(M-1,N-1)并转发出的最短时延。
二、输入描述
第一行两个数字,M,N,接下来有M行,每行有N个数据,表示M*N的矩阵。
三、输出描述
最短时延值。
四、解题思路
- 第一行输入矩阵的行数M和矩阵的列数N;
- 接下来有M行,每行有N个数据,表示M*N的矩阵;
- 定义矩阵的二维数组,并将输入值加入到二维数组;
- 定义集合delayList,存储所有到达终点的路径的延迟时间;
- 定义集合pathSet,存储当前路径中已经访问过的位置;
- 将起点加入路径中;
- 从起点开始遍历矩阵;
- 判断是否到达终点;
- 更新延迟时间;
- 将当前的延迟时间加入结果列表;
- 遍历八个方向;
- 判断新的位置是否越界且是否已经访问过;
- 将新的位置加入路径中;
- 递归遍历