n皇后问题是使用回溯算法求解的代表问题?我想要C语言版的!

解决方案 »

  1.   

    这题对于很多程序员来说都是偏难的
      

  2.   

    看着有人几行代码就解决了,我看都看不懂
    public class EightQueen {
        static int sum = 0, upperlim = 1;
        private static void test(int row, int ld, int rd) {
            if (row != upperlim) {
                int pos = upperlim & ~(row | ld | rd);
                while (pos != 0) {
                    int p = pos & -pos;
                    pos -= p;
                    test(row + p, (ld + p) << 1, (rd + p) >> 1);
                }
            } else{
                sum++;
            }
        }
        public static void main(String[] args) {
            int n = 5;
            long tm = System.currentTimeMillis();
            if ((n < 1) || (n > 32)) {
                System.out.println(" heh..I can't calculate that.");
                System.exit(-1);
            }
            System.out.println(n + " Queens");
            upperlim = (upperlim << n) - 1;
            test(0, 0, 0);
            System.out.println("Number of solutions is " + sum + ", Useing "
                    + (System.currentTimeMillis() - tm) / 1000 + " seconds");
        }
    }