题目连接
思路:特判一些条件即可。
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");
  }
}                
                










