Untitled

mail@pastecode.io avatar
unknown
plain_text
a year ago
3.1 kB
2
Indexable
Never
package Grid_Acid;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.util.Scanner;

public class Solution {
	static int n, m, res1, res2, count1, count2;
	static int[][] a = new int[3005][3005], lan = new int[3005][3005], visit = new int[3005][3005];
	static int[] dx = { 0, 1, 0, -1 }, dy = { 1, 0, -1, 0 };

	public static boolean da_1(int x, int y) {
		for (int i = 0; i < 4; i++) {
			int newx = x + dx[i], newy = y + dy[i];
			if (newx < 0 || newy < 0 || newx >= n || newy >= m
					|| a[newx][newy] == 0) {
				return true;
			}
		}
		return false;
	}

	public static int da_4(int x, int y) {
		int count = 0;
		for (int i = 0; i < 4; i++) {
			int newx = x + dx[i], newy = y + dy[i];
			if (newx >= 0 && newy >= 0 && newx < n && newy < m
					&& visit[newx][newy] == 1) {
				count++;
			}
		}
		return count;
	}

	public static void BFS(int xstart, int ystart) {
		int front = 0, rear = 0;
		int[] queueX = new int[9000005], queueY = new int[9000005];
		queueX[front] = xstart;
		queueY[front] = ystart;
		lan[xstart][ystart] = 0;
		visit[xstart][ystart] = 1;
		while (front <= rear) {
			int x = queueX[front], y = queueY[front];
			int c = lan[x][y];
			res2 = c;
			count1--;
			for (int i = 0; i < 4; i++) {
				int newx = x + dx[i], newy = y + dy[i];
				if (newx >= 0 && newy >= 0 && newx < n && newy < m
						&& visit[newx][newy] == 0 && a[newx][newy] != 0) {
					if(a[newx][newy] == 1){
						rear++;
						queueX[rear] = newx;
						queueY[rear] = newy;
						visit[newx][newy] = 1;
						lan[newx][newy] = c+1;
					}else if(a[newx][newy] == 2 && da_4(newx, newy) == 4){
						visit[newx][newy] = 1;
						lan[newx][newy] = c+1;
					}
				}
			}
			front++;
		}
	}

	public static void main(String[] args) {
		try {
			System.setIn(new FileInputStream("input.txt"));
		} catch (FileNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		Scanner scanner = new Scanner(System.in);
		int test = scanner.nextInt();
		for (int t = 1; t <= test; t++) {
			n = scanner.nextInt();
			m = scanner.nextInt();
			for (int i = 0; i < n; i++) {
				for (int j = 0; j < m; j++) {
					a[i][j] = 0;
					lan[i][j] = 0;
					visit[i][j] = 0;
				}
			}
			int x = scanner.nextInt()-1, y = scanner.nextInt()-1;
			count1 = 0; count2 = 0;
			int xda = 0, yda = 0;
			for (int i = 0; i < n; i++) {
				for (int j = 0; j < m; j++) {
					a[i][j] = scanner.nextInt();
					if(a[i][j] == 2){
						xda = i;
						yda = j;
					}
					if(a[i][j] == 1){
						count1 ++;
					}
				}
			}
			
			res1 = 0; res2 = 0; 
			if(da_1(xda, yda)){
				res1 = -1; res2 = -1;
			}else{
				BFS(x, y);
				if(da_4(xda, yda) != 4){
					res1 = -1; res2 = -1;
				}else{
					res1 = lan[xda][yda];
					if(count1>0){
						res2 = -1;
					}else{
						res2++ ;
					}
				}
				
			}
			
			System.out.println("Case #" + t +"\n" + res1 + " " + res2);
		}
		scanner.close();
	}
}