题目连接
思路:特判一些条件即可。
import java.math.BigInteger; import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; import java.util.Comparator; import java.util.LinkedList; import java.util.Queue; import java.util.Scanner; public class Main {// date1 = "2019-06-29", date2 = "2019-06-30" static class Node{ int x; int y; int step; Node(int x, int y, int step){ this.x = x; this.y = y; this.step = step; } } public static void main(String[] args) { Scanner cin = new Scanner(System.in); int dir[][] = {{1, 0},{-1, 0},{0, 1},{0, -1}}; int vis[][]; char a[][]; int tran[][][]; int n = cin.nextInt(); int m = cin.nextInt(); a = new char[n + 5][m + 5]; vis = new int[n + 5][m + 5]; tran = new int[n + 5][m + 5][2]; for (int i = 1; i <= n; i++) { String s = cin.next(); for (int j = 1; j <= m; j++) { a[i][j] = s.charAt(j - 1); } } int qx = cin.nextInt(); for(int i = 0;i < qx;i++) { int x = cin.nextInt(); int y = cin.nextInt(); tran[x][y][0] = cin.nextInt(); tran[x][y][1] = cin.nextInt(); } int tx = cin.nextInt(); int ty = cin.nextInt(); Queue<Node> q = new LinkedList<Node>(); q.add(new Node(1, 1, 0)); while(!q.isEmpty()) { Node node = q.poll(); if(node.x == tx && node.y == ty) { System.out.println(node.step); System.exit(0); } if(tran[node.x][node.y][0] != 0) { int dx = tran[node.x][node.y][0]; int dy = tran[node.x][node.y][1]; if(dx == tx && dy == ty) { System.out.println(node.step); System.exit(0); } if(a[dx][dy] == '*') { System.out.println("No solution"); System.exit(0); }else { if(vis[dx][dy] == 1)continue; vis[dx][dy] = 1; q.add(new Node(dx, dy, node.step)); // continue; } continue; } for(int i = 0; i < 4;i++) { int nx = node.x + dir[i][0]; int ny = node.y + dir[i][1]; if(nx <= 0 || nx > n || ny <= 0 || ny > m || vis[nx][ny] == 1 || a[nx][ny] == '*')continue; vis[nx][ny] = 1; q.add(new Node(nx, ny, node.step + 1)); } } System.out.println("No solution"); } }