Почему он всегда печатает "нет пути"
package shortestpath; import java.util.LinkedList; import java.util.Scanner; public class ShortestPath { public int[] dx = {0,-1}; public int[] dy = {1, 0}; public static int[][] maze = new int[10][10]; public int n; public int m; public int[][] dist = new int[10][10]; public boolean valid(int i, int j) { return i >= 0 && i < n && j >= 0 && j < m && maze[i][j] == 1; } public int bfs(Pair<Integer,Integer> source,Pair<Integer,Integer> destination) { for (int i = 0 ; i < 10 ; i++) { for (int j = 0 ; j < 10 ; j++) { dist[i][j] = (int) 1e9; } } LinkedList<pair> q = new LinkedList<pair>(); q.add(source); dist[source.first][source.second] = 0; while (!q.isEmpty()) { Pair<Integer,Integer> cur = q.get(q.size()-1); q.pop(); if (cur.first == destination.first && cur.second == destination.second) { return dist[cur.first][cur.second]; } for (int i = 0 ; i < 2 ; i++) { int newi = dx[i] + cur.first; int newj = dy[i] + cur.second; if (valid(newi,newj)) { if (dist[newi][newj] > dist[cur.first][cur.second] + 1) { dist[newi][newj] = dist[cur.first][cur.second] + 1; Pair<Integer,Integer> x = new Pair<>(newi,newj); q.push(x); } } } } return -1; } public static void main(String[] args) { Scanner sc=new Scanner(System.in); System.out.println("Enter the size of the maze"); int n=sc.nextInt(); System.out.println("Enter the maze"); int m=sc.nextInt(); for (int i = 0 ; i < n ; i++) { for (int j = 0 ; j < m ; j++) { maze[i][j] = sc.nextInt(); } } Pair<Integer,Integer> source = new Pair<Integer,Integer>(); Pair<Integer,Integer> dest = new Pair<Integer,Integer>(); System.out.println("Enter the source"); source.first = sc.nextInt(); source.second = sc.nextInt(); System.out.println("Enter the destination"); dest.first = sc.nextInt(); dest.second = sc.nextInt(); int x = new ShortestPath().bfs(source, dest); if (x == -1) { System.out.print("No Path\n "); } else { System.out.print("you can go from source to destination by move "); System.out.print(x); System.out.print(" moves\n"); } } }
Что я уже пробовал:
я перепробовал все, но не могу определить, где ошибка.
я думаю это здесь
public int bfs(Pair<Integer,Integer> source,Pair<Integer,Integer> destination) { for (int i = 0 ; i < 10 ; i++) { for (int j = 0 ; j < 10 ; j++) { dist[i][j] = (int) 1e9; } } LinkedList<pair> q = new LinkedList<pair>(); q.add(source); dist[source.first][source.second] = 0; while (!q.isEmpty()) { Pair<Integer,Integer> cur = q.get(q.size()-1); q.pop(); if (cur.first == destination.first && cur.second == destination.second) { return dist[cur.first][cur.second]; } for (int i = 0 ; i < 2 ; i++) { int newi = dx[i] + cur.first; int newj = dy[i] + cur.second; if (valid(newi,newj)) { if (dist[newi][newj] > dist[cur.first][cur.second] + 1) { dist[newi][newj] = dist[cur.first][cur.second] + 1; Pair<Integer,Integer> x = new Pair<>(newi,newj); q.push(x); } } } } return -1; }
Richard MacCutchan
Пожалуйста, правильно отформатируйте свой код и более четко объясните, что это за ошибка и где она возникает.
ZurdoDev
Потому что x всегда равно отрицательному 1. Чтобы узнать почему, отладьте свой код.
Patrice T
Вам нужна помощь, но вы даже не взяли краску, чтобы рассказать, что должна делать программа.
Добавление образца набора данных также является хорошей идеей.