zoukankan      html  css  js  c++  java
  • N皇后问题

    Description

    在N*N的方格棋盘放置了N个皇后,使得它们不相互攻击(即任意2个皇后不允许处在同一排,同一列,也不允许处在与棋盘边框成45角的斜线上。
    你的任务是,对于给定的N,求出有多少种合法的放置方法。

     

    Input

    共有若干行,每行一个正整数N≤10,表示棋盘和皇后的数量;如果N=0,表示结束。
     

    Output

    共有若干行,每行一个正整数,表示对应输入行的皇后的不同放置数量。
     

    Sample Input

    1
    8
    5
    0
     

    Sample Output

    1
    92
    10
     
    处理回溯问题,以及要在循环输入之前进行筛。
    View Code
     1 #include<stdio.h>
    2 #include<stdlib.h>
    3 #include<math.h>
    4 int x[11], N, sum;
    5 bool judge( int k )//判断是否可以加入
    6 {
    7 for( int i = 1; i < k; i++ )
    8 {
    9 if( x[i] == x[k] || abs(k-i) == abs(x[k] - x[i]) )
    10 return false;
    11 }
    12 return true;
    13 }
    14
    15 void dfs( int k )//回溯,K初值为1
    16 {
    17 if( k > N )//安排完后,sum++
    18 sum++;
    19 else
    20 {
    21 for( int i = 1; i <= N; i++ )//第K个皇后的列坐标
    22 {
    23 x[k] = i;
    24 if( judge( k ) )
    25 {
    26 dfs( k+1 );
    27 }
    28 }
    29 }
    30 }
    31
    32 int main()
    33 {
    34 int ans[11];
    35 for( N = 1; N <= 10; N++ )
    36 {
    37 sum = 0;
    38 dfs(1);
    39 ans[N] = sum;
    40 }//预处理
    41 while( scanf( "%d", &N )!=EOF &&N )
    42 {
    43 printf( "%d\n", ans[N] );
    44 }
    45 return 0;
    46 }
  • 相关阅读:
    iphone 图标下载
    iphone 下拉刷新(转)
    技术书评(.NET为主)
    我也设计模式——3.Singleton
    我也设计模式——14.Flyweight
    Web2.0技术研究笔记——1.分类与资源
    我也设计模式——4.Builder
    C#之CLR读书笔记 0
    IMemento 永远置顶
    我也设计模式——21.Memento
  • 原文地址:https://www.cnblogs.com/zsj576637357/p/2379457.html
Copyright © 2011-2022 走看看