E - 連連看 HDU - 1175 Java

題目連接

拿來練dfs了。細節較多。debug較多。

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Comparator;
import java.util.HashMap;
import java.util.HashSet;
import java.util.LinkedList;
import java.util.Queue;
import java.util.Scanner;
import java.util.Set;
import java.util.TreeSet;
import java.util.Vector;

public class Main {
	static int n, m, x1, x2, y1, y2;
	static boolean vis[][] = new boolean[1005][1005];
	static int mp[][] = new int[1005][1005];
	static int flag;
	static void dfs(int x, int y, int turn, int dis) {
		if(flag == 1) {
			vis[x][y] = false;
			return ;
		}
	//	System.out.println(x + " " + y + " " + turn + " " + dis + " " + vis[x][y]);
		if(mp[x][y] != 0 || turn > 2 || x <= 0 || x > n || y <= 0 || y > m || vis[x][y])
		{
			return ;
		}
		if(x == x2 && y == y2) {
			flag = 1;
			vis[x][y] = false;
		//	System.out.println(1111111);
			return ;
		}
		vis[x][y] = true;
		if(x == x1 && y == y1) {
		dfs(x, y + 1, turn, 1);
		dfs(x + 1, y, turn, 2);
		dfs(x, y - 1, turn, 3);
		dfs(x - 1, y, turn, 4);
		}
		if(dis == 1) {
		dfs(x, y + 1, turn, 1);
		dfs(x + 1, y, turn + 1, 2);
		dfs(x, y - 1, turn + 1, 3);
		dfs(x - 1, y, turn + 1, 4);
		}
		if(dis == 2) {
		dfs(x + 1, y, turn, 2);
		dfs(x, y + 1, turn + 1, 1);
		dfs(x, y - 1, turn + 1, 3);
		dfs(x - 1, y, turn + 1, 4);
		}
		if(dis == 3) {
		dfs(x, y - 1, turn, 3);	
		dfs(x, y + 1, turn + 1, 1);
		dfs(x + 1, y, turn + 1, 2);
		dfs(x - 1, y, turn + 1, 4);
		}
		if(dis == 4) {
		dfs(x - 1, y, turn, 4);
		dfs(x, y + 1, turn + 1, 1);
		dfs(x + 1, y, turn + 1, 2);
		dfs(x, y - 1, turn + 1, 3);
		}
		vis[x][y] = false;
	}
	public static void main(String[] args) {
		Scanner cin = new Scanner(System.in);
		while(true) {
			n = cin.nextInt();
			m = cin.nextInt();
			if(n == 0 && m == 0)break;
			for(int i = 1;i <= n;i++)
				for(int j = 1;j <= m;j++) {
				mp[i][j] = cin.nextInt();
				vis[i][j] = false;
				}
			int q = cin.nextInt();
			for(int i = 0; i < q;i++) {
				x1 = cin.nextInt();
				y1 = cin.nextInt();
				x2 = cin.nextInt();
				y2 = cin.nextInt();
				flag = 0;
				if(mp[x1][y1] == mp[x2][y2] && mp[x2][y2] != 0) {
					int t1 = mp[x1][y1];
					int t2 = mp[x2][y2];
					mp[x1][y1] = 0;
					mp[x2][y2] = 0;
					dfs(x1, y1, 0, 1);
					mp[x1][y1] = t1;
					mp[x2][y2] = t2;
					if(flag == 1)System.out.println("YES");
					else System.out.println("NO");
				}else System.out.println("NO");
			}
		}
		
	}
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章