一块蒸蛋糕


私信TA

用户名:736015747

访问量:991

签 名:

等  级
排  名 7492
经  验 1308
参赛次数 0
文章发表 10
年  龄 0
在职情况 学生
学  校 东南大学
专  业 扫地

  自我简介:

TA的其他文章


解题思路:

注意事项:

参考代码:

package 练习;

import java.util.*;

public class Main {
	static Scanner sc = new Scanner(System.in);
	static int n = sc.nextInt();
	static int count = 0;
	static ArrayList<Integer> ans = new ArrayList<>();

	public static void main(String[] args) {
		// int[] north ={2,4,3,4};
		// int[] west = {4,3,3,3};
		int[] north = new int[n];
		int[] west = new int[n];
		for (int i = 0; i < north.length; i++) {
			north[i] = sc.nextInt();
		}
		for (int i = 0; i < west.length; i++) {
			west[i] = sc.nextInt();
		}
		int[][] map = new int[n][n];
		for (int i = 0; i < n; i++) {
			for (int j = 0; j < n; j++) {
				map[i][j] = count++;
			}
		}
		dfs(map, 0, 0, north, west);

	}

	private static void dfs(int[][] map, int x, int y, int[] north, int[] west) {
		boolean check = true;
		if (x >= n || y >= n || x < 0 || y < 0) {
			return;
		}
		for (int i = 0; i < n - 1; i++) {
			if (north[i] != 0 || west[i] != 0) {
				check = false;
			}
		}
		if (north[n - 1] != 1 || west[n - 1] != 1) {
			check = false;
		}
		for (int i = 0; i < n; i++) {
			if (north[i] < 0 || west[i] < 0) {
				return;
			}
		}
		if (x == n - 1 && y == n - 1 && check == false) {
			return;
		}

		if (x == n - 1 && y == n - 1 && check) {
			ans.add(map[x][y]);
			for (int i = 0; i < ans.size(); i++) {
				System.out.print(ans.get(i) + " ");
			}
			System.exit(0);
		}
		west[x]--;
		north[y]--;
		ans.add(map[x][y]);
		dfs(map, x, y + 1, north, west);
		dfs(map, x + 1, y, north, west);
		dfs(map, x - 1, y, north, west);
		dfs(map, x, y - 1, north, west);
		ans.remove(ans.size()-1);
		west[x]++;
		north[y]++;
	}
}


 

0.0分

0 人评分

  评论区

发现了, 没有检查已走过的路径
2022-04-05 21:23:25
  • «
  • 1
  • »