小红拿到了一个行列的二维矩阵,矩阵的元素都是正整数。 小红站在矩阵的左上角,她每一步可以走上、下、左、右四种方向中的一个,花费的时间为这两个相邻元素的差的绝对值。另外,小红最多可以使用一次传送阵,不花费任何时间,从一个数到达另一个相同的数。 小红想知道, 自己从左上角走到右下角最少需要多少时间?

区块链毕设网qklbishe.com为您提供问题的解答

小红拿到了一个小红拿到了一个行列的二维矩阵,矩阵的元素都是正整数。   小红站在矩阵的左上角,她每一步可以走上、下、左、右四种方向中的一个,花费的时间为这两个相邻元素的差的绝对值。另外,小红最多可以使用一次传送阵,不花费任何时间,从一个数到达另一个相同的数。      小红想知道, 自己从左上角走到右下角最少需要多少时间?小红拿到了一个行列的二维矩阵,矩阵的元素都是正整数。   小红站在矩阵的左上角,她每一步可以走上、下、左、右四种方向中的一个,花费的时间为这两个相邻元素的差的绝对值。另外,小红最多可以使用一次传送阵,不花费任何时间,从一个数到达另一个相同的数。      小红想知道, 自己从左上角走到右下角最少需要多少时间?列的二维矩阵,矩阵的元素都是正整数。
小红站在矩阵的左上角,她每一步可以走上、下、左、右四种方向中的一个,花费的时间为这两个相邻元素的差的绝对值。另外,小红最多可以使用一次传送阵,不花费任何时间,从一个数到达另一个相同的数。

小红想知道, 自己从左上角走到右下角最少需要多少时间?

回溯法,超时了
import java.util.Map; import java.util.Scanner;   import java.util.HashMap;   // 注意类名必须为 Main, 不要有任何 package xxx 信息 public class Main {       static long min = 9999999999l;       public static void main(String[] args) {           Scanner in = new Scanner(System.in);         int n = in.nextInt();         int m = in.nextInt();         int[][] matrix = new int[n][m];         boolean[][] arrived = new boolean[n][m];         int i = 0;         // 注意 hasNext 和 hasNextLine 的区别         while (in.hasNextInt()) { // 注意 while 处理多个 case             matrix[i / m][i % m] = in.nextInt();             i++;         }         backtrace(matrix, arrived, 0, 0, n, m, false, 0);         System.out.println(min);         }       static void backtrace(int[][] matrix, boolean[][] arrived, int x, int y, int m,                           int n, boolean transport, long time) {         if (x == m - 1 && y == n - 1) {             if (time < min) {                 min = time;             }             return;         }         if (x + 1 < m && !arrived[x + 1][y]) {             int cost = Math.abs(matrix[x + 1][y] - matrix[x][y]);             arrived[x + 1][y] = true;             backtrace(matrix, arrived, x + 1, y, m, n, transport, time + cost);             arrived[x + 1][y] = false;         }         if (x - 1 >= 0 && !arrived[x - 1][y]) {             int cost = Math.abs(matrix[x - 1][y] - matrix[x][y]);             arrived[x - 1][y] = true;             backtrace(matrix, arrived, x - 1, y, m, n, transport, time + cost);             arrived[x - 1][y] = false;         }         if (y + 1  < n && !arrived[x][y + 1]) {             int cost = Math.abs(matrix[x][y + 1] - matrix[x][y]);             arrived[x ][y + 1] = true;             backtrace(matrix, arrived, x, y + 1, m, n, transport, time + cost);             arrived[x][y + 1] = false;         }         if (y - 1  >= 0 && !arrived[x][y - 1]) {             int cost = Math.abs(matrix[x][y - 1] - matrix[x][y]);             arrived[x ][y - 1] = true;             backtrace(matrix, arrived, x, y - 1, m, n, transport, time + cost);             arrived[x][y - 1] = false;         }         if(!transport) {             for(int i = 0; i<m; i++) {                 for(int j =0;j<n;j++) {                     if(matrix[i][j] == matrix[x][y] && !arrived[i][j]) {                         arrived[i][j] = true;                         backtrace(matrix, arrived, i, j, m, n, true, time );                         arrived[i][j] = false;                     }                 }             }         }     } }

编辑于 今天 01:36:44

以上就是关于问题小红拿到了一个行列的二维矩阵,矩阵的元素都是正整数。
小红站在矩阵的左上角,她每一步可以走上、下、左、右四种方向中的一个,花费的时间为这两个相邻元素的差的绝对值。另外,小红最多可以使用一次传送阵,不花费任何时间,从一个数到达另一个相同的数。

小红想知道, 自己从左上角走到右下角最少需要多少时间?的答案

欢迎关注区块链毕设网-
专业区块链毕业设计成品源码,定制。

区块链NFT链游项目方科学家脚本开发培训

承接区块链项目定制开发

微信:btc9767

QQ :1330797917

TELEGRAM: BTCOK9

承接区块链项目定制开发


qklbishe.com区块链毕设代做网专注|以太坊fabric-计算机|java|毕业设计|代做平台-javagopython毕设 » 小红拿到了一个行列的二维矩阵,矩阵的元素都是正整数。 小红站在矩阵的左上角,她每一步可以走上、下、左、右四种方向中的一个,花费的时间为这两个相邻元素的差的绝对值。另外,小红最多可以使用一次传送阵,不花费任何时间,从一个数到达另一个相同的数。 小红想知道, 自己从左上角走到右下角最少需要多少时间?