再帰
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