The n-queens puzzle is the problem of placing n queens on an n×n chessboard such that no two queens attack each other.
Given an integer n, return all distinct solutions to the n-queens puzzle.
Each solution contains a distinct board configuration of the n-queens' placement, where 'Q'
and '.'
both indicate a queen and an empty space respectively.
For example,
There exist two distinct solutions to the 4-queens puzzle:
[ [".Q..","...Q","Q...","..Q."],["..Q.","Q...","...Q",".Q.."]]
public class Solution { public IList<IList<string>> SolveNQueens(int n) { IList<IList<string>> res = new List<IList<string>>(); IList<string> list = new List<string>(); string s = ""; for (int i = 0; i < n; i++) s += "."; for (int i = 0; i < n; i++) list.Add(s); PlaceQ(res, list, n, 0); return res; } private void PlaceQ(IList<IList<string>> res, IList<string> list,int n,int row) { if (row == n) { res.Add(new List<string>(list)); return; } for (int col = 0; col < n; col++) if (isValid(list,n,row,col)) { list[row]=list[row].Remove(col,1).Insert(col, "Q"); PlaceQ(res, list, n, row + 1); list[row] = list[row].Remove(col,1).Insert(col, "."); } } private static bool isValid(IList<string> list, int n, int row, int col) { for (int i = 0; i < row; i++) if (list[i][col] == 'Q') return false; for (int i = row - 1, j = col - 1; i >= 0 && j >= 0; i--, j--) if (list[i][j] == 'Q') return false; for (int i = row - 1, j = col + 1; i >= 0 && j < n; i--, j++) if (list[i][j] == 'Q') return false; return true; } }