【每日一题】【回溯backtrace】N皇后
n 皇后问题 研究的是如何将 n 个皇后放置在 n×n 的棋盘上,并且使皇后彼此之间不能相互攻击。
给你一个整数 n ,返回所有不同的 n 皇后问题 的解决方案。
每一种解法包含一个不同的 n 皇后问题 的棋子放置方案,该方案中 'Q' 和 '.' 分别代表了皇后和空位。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/n-queens
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
class Solution { private List<List<String>> res = new ArrayList<>(); private List<Integer> path = new ArrayList<>(); public List<List<String>> solveNQueens(int n) { backTracking(n); return res; } private void backTracking(int n) { if (path.size() == n) { res.add(getResult()); } for (int j = 0; j < n; j++) { if (invalid(path.size(), j)) continue; path.add(j); backTracking(n); path.remove(path.size() - 1); } } private boolean invalid(int x, int y) { for (int i = 0; i < path.size(); i++) { int j = path.get(i); if (i == x || j == y || i - j == x - y || i + j == x + y) { return true; } } return false; } private List<String> getResult() { return path.stream().map( row -> { StringBuilder sb = new StringBuilder(); for (int i = 0; i < path.size(); i++) { sb.append(i == row ? "Q" : "."); } return sb.toString(); } ).collect(Collectors.toList()); } }
本文来自博客园,作者:哥们要飞,转载请注明原文链接:https://www.cnblogs.com/liujinhui/p/15496420.html