​题目连接​

思路:特判一些条件即可。

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");
}
}