import java.util.*; class Node { int row; int col; Node parent; // Node next[]; Node (int r, int c) { row = r; col = c; parent = null; } Node (int r, int c, Node par) { row = r; col = c; parent = par; } } class Queen { static void print_row (int sz, int c) { int i; for (i = 1; i < c; i++) { System.out.print('.'); } System.out.print('Q'); for (i = c+1; i <= sz; i++) { System.out.print('.'); } System.out.print('\n'); } static void print_solution (Node t, int sz) { while (t != null) { print_row (sz, t.col); t = t.parent; } return; } static boolean position_test (Node t, int sz, int c) { int diff = 1; while (t != null) { if (t.col == c) { return false; } if (t.col - c == diff) { return false; } if (c - t.col == diff) { return false; } t = t.parent; diff = diff + 1; } return true; } static void search_bfs (int sz) { int i; Node cur; Node nxt; LinkedList que = new LinkedList(); for (i = 1; i <= sz; i++) { que.offer(new Node(1, i)); } while ((cur = que.poll()) != null) { if (cur.row == sz) { print_solution (cur, sz); System.out.print ("\n"); continue; } for (i = 1; i <= sz; i++) { if (position_test (cur, sz, i)) { nxt = new Node (cur.row+1, i, cur); que.offer(nxt); } } } } public static void main (String argv[]) { search_bfs (8); return; } }