Untitled
unknown
plain_text
2 years ago
3.4 kB
5
Indexable
import java.util.Scanner; class queue { static int[] Data = new int[40000]; static int front, rear; public queue() { this.front = this.rear = -1; } void reset() { front = rear = -1; } public void enQueue(int value) { Data[++rear] = value; } int deQueue() { return Data[++front]; } int get(){ int x = front + 1; return Data[x]; } boolean isEmpty() { if (this.front == this.rear) { return true; } return false; } } public class Fastrobot { static int inX, inY, outX, outY; static final int MAX = 10; static int[][] Map = new int[MAX][MAX]; static int[][] Map2 = new int[MAX][MAX]; static boolean[][] visited = new boolean[MAX][MAX]; static int n, m, cnt_exit; static char[][] arr = new char[20][20]; static int[] spinR = { 0, 0, 1, -1 }; static int[] spinC = { 1, -1, 0, 0 }; static int cr, cc, nr, nc, r, c, min,x,y; static boolean ans = false; static String row; public static void main(String agr[]){ Scanner sc = new Scanner(System.in); queue rqueue = new queue(); queue cqueue = new queue(); int t = sc.nextInt(); for(int test_case = 1; test_case <= t; test_case++){ rqueue.reset(); cqueue.reset(); n = sc.nextInt(); m = sc.nextInt(); inY = sc.nextInt(); inX = sc.nextInt(); outY = sc.nextInt(); outX = sc.nextInt(); sc.nextLine(); for (int i = 0; i < n; i++){ for(int j = 0; j < m; j++){ visited[i][j] = false; } } for(int i = 0; i< n; i++){ row = sc.nextLine(); for(int j = 0; j< row.length(); j++){ Map[i][j] = Integer.valueOf(String.valueOf(row.charAt(j))); Map2[i][j] = Integer.valueOf(String.valueOf(row.charAt(j))); } } x = inX - 1; y = inY - 1; Map2[x][y] = -1; while(x != outX - 1 || y != outY - 1){ if(x - 1 > 0 && Map[x - 1][y] == 0){ for(int i = x - 1; i > 0; i--){ // tren if(Map[i][y] == 0 && visited[i][y] == false){ rqueue.enQueue(i); cqueue.enQueue(y); Map2[i][y] = Map2[x][y] + 1; visited[i][y] = true; }else{ break; } } } if(x + 1 <= n && Map[x + 1][y] == 0){ // duoi for(int i = x + 1; i < n; i++){ if(Map[i][y] == 0 && visited[i][y] == false){ rqueue.enQueue(i); cqueue.enQueue(y); Map2[i][y] = Map2[x][y] + 1; visited[i][y] = true; }else{ break; } } } if(y + 1 <= m && Map[x][y + 1] == 0){ // phai for(int i = y + 1; i < m; i++){ if(Map[x][i] == 0 && visited[x][i] == false){ rqueue.enQueue(x); cqueue.enQueue(i); Map2[x][i] = Map2[x][y] + 1; visited[x][i] = true; }else{ break; } } } if(y - 1 > 0 && Map[x][y - 1] == 0){ // trai for(int i = y; i > 0; i--){ if(Map[i][y] == 0 && visited[i][y] == false){ rqueue.enQueue(x); cqueue.enQueue(i); Map2[x][i] = Map2[x][y] + 1; visited[i][y] = true; }else{ break; } } } x = rqueue.deQueue(); y = cqueue.deQueue(); } System.out.println(Map2[outX-1][outY - 1]); } } } 2 7 7 1 2 7 5 1111111 0000011 1011001 1011100 1011110 1000000 1111111 7 7 1 2 7 6 1111111 0000001 1011000 1011100 1011110 1000000 1111111
Editor is loading...