给定一个的网格,在网格中每次在不超过边界的情况下可以选择向上、向下、向左、向右移动一格。网格中的一些格子上放置有障碍物,放有障碍物的格子不能到达。求从到最少的移动次数。若不能到达,输出。

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

给定一个给定一个的网格,在网格中每次在不超过边界的情况下可以选择向上、向下、向左、向右移动一格。网格中的一些格子上放置有障碍物,放有障碍物的格子不能到达。求从到最少的移动次数。若不能到达,输出。的网格,在网格中每次在不超过边界的情况下可以选择向上、向下、向左、向右移动一格。网格中的一些格子上放置有障碍物,放有障碍物的格子不能到达。求从给定一个的网格,在网格中每次在不超过边界的情况下可以选择向上、向下、向左、向右移动一格。网格中的一些格子上放置有障碍物,放有障碍物的格子不能到达。求从到最少的移动次数。若不能到达,输出。给定一个的网格,在网格中每次在不超过边界的情况下可以选择向上、向下、向左、向右移动一格。网格中的一些格子上放置有障碍物,放有障碍物的格子不能到达。求从到最少的移动次数。若不能到达,输出。最少的移动次数。若不能到达,输出给定一个的网格,在网格中每次在不超过边界的情况下可以选择向上、向下、向左、向右移动一格。网格中的一些格子上放置有障碍物,放有障碍物的格子不能到达。求从到最少的移动次数。若不能到达,输出。

使用dfs会导致溢出,选用bfs合适

import java.util.*;  class pair {     int x = 0;     int y = 0;     public pair(int x, int y) {         this.x = x;         this.y = y;     } }  public class Main {     Queue<pair> q = new LinkedList<>();     int t[][] = new int[1000][1000];     boolean b[][] = new boolean[1000][1000];      static int dx[] = { -1, 0, 1, 0 };     static int dy[] = { 0, 1, 0, -1 };      int bfs(int n, int m, int x, int y, int x0, int y0, char z[][]) {         for (int k = 0; k < t.length; k++)             for (int l = 0; l < t[k].length; l++) {                 t[k][l] = -1;             }         for (int d = 0; d < b.length; d++)             for (int f = 0; f < b[d].length; f++) {                 b[d][f] = false;             }          b[x][y] = true;         q.offer(new pair(x, y));         while (!q.isEmpty()) {             int x1, y1;             x1 = q.peek().x;             y1 = q.peek().y;             q.poll();             for (int i = 0; i < 4; i++) {                 int x2 = x1 + dx[i], y2 = y1 + dy[i];                 if (x2 >= 0 && x2 <= n - 1 && y2 >= 0 && y2 <= m - 1                      && b[x2][y2] == false && z[x2][y2] == '.') {                     b[x2][y2] = true;                     t[x2][y2] = t[x1][y1] + 1;                     q.offer(new pair(x2, y2));                 }             }         }         return t[x0][y0] + 1;     }      public static void main(String[] args) {         Scanner in = new Scanner(System.in);         int n = in.nextInt();         int m = in.nextInt();         int x = in.nextInt();         int y = in.nextInt();         int x0 = in.nextInt();         int y0 = in.nextInt();         char[][] z = new char[n][];         for (int i = 0; i < n; i++) {             z[i] = in.next().toCharArray();         }         Main mi = new Main();         if (mi.bfs(n, m, x - 1, y - 1, x0 - 1, y0 - 1, z) == 0)             System.out.println(-1);         else             System.out.println(mi.bfs(n, m, x - 1, y - 1, x0 - 1, y0 - 1, z));     } }

59:29

以上就是关于问题给定一个的网格,在网格中每次在不超过边界的情况下可以选择向上、向下、向左、向右移动一格。网格中的一些格子上放置有障碍物,放有障碍物的格子不能到达。求从到最少的移动次数。若不能到达,输出。的答案

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

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

从业7年-专注一级市场


微信:btc9767
TELEGRAM :https://t.me/btcok9

具体资料介绍

web3的一级市场千万收益的逻辑


进群点我



qklbishe.com区块链毕设代做网专注|以太坊fabric-计算机|java|毕业设计|代做平台-javagopython毕设 » 给定一个的网格,在网格中每次在不超过边界的情况下可以选择向上、向下、向左、向右移动一格。网格中的一些格子上放置有障碍物,放有障碍物的格子不能到达。求从到最少的移动次数。若不能到达,输出。