Nクイーン問題解決

再帰

1  // 解決Nクイーンズ
 2  // 再帰的な方法は、
図3の#include <stdio.hの>
 4の#include <STDLIB.H>
 。5  CONST  INT N = 20である;
 6  INT Q [N];
 7  ボイド DISP(INT N-){
 8      静的 int型 COUNT = 0 ;
 9。     INT I;
 10      のprintf(" 番目の溶液の%のD:"、++ COUNT)
 。11      用の(私は= 1 ; I <= N; I ++ 12である          のprintf("(%D%のD)"I、Q [I]);
 13である      のprintf(" \ N- " );
 14  }
 15  INTプレイス(INT K、INT J){         // テスト(K、J)の位置を配置することができますクイーン
16      INT Iは= 1 ;
 17。     一方、(I < K){
 18は         IF((Q [I] == J)||(ABS(Q [I] - J)== ABS(KI)))     // 同じ列又は同じ対角線
。19              リターン 0 ;
 20である          I ++ ; 
 21である     }
 22が     リターン 1 ;
 23であります }
 24  空隙クイーン(INT K、INT N-){     // クイーン1〜kの再帰実装配置
25      INT J、
 26は     IF(K> N-)
 27          DISP(N-);
 28      {
 29          (J = 1、Jを<= N; J ++ ){
 30              IF(プレイス(K、J)){         // k番目の行に適切な位置(k、j)を見つける
31である                  Q [K] = J;
 32                  クイーン(K + 1 )、N-。
 33              }
 34          }
 35      }
36  }
 37 [  INT メイン(){
 38は、     INT nは、
 39      のprintf(" N \ NNの値を入力してください= " ;)
 40      (scanfの" %のD "、&n)は、
 41である      (クイーン1 、N)
 42が     リターン 0 ;
 43  } 
 44  
コードの表示

おすすめ

転載: www.cnblogs.com/Hqx-curiosity/p/12150585.html