エイトクイーン問題 - 印刷ソリューション

1の#include <cstdioを>
 2の#include <キュー>
 3。の#include <入出力ストリーム>
 4。の#include <ユーティリティ>
 5。の#include <アルゴリズム>
 6。の#include <ベクトル>
 7。 使用した 名前空間STD;
 8  
。9  INT C [ 10 ]; / / クイーンの各列の一時的な記録位置
10  のconst  int型 N- = 8 ; // クイーンの数
。11  
12は、 チャー [Pの8 ] [ 8 ]; // ボードがドロップできるかどうかのレコード
13は INTのN = 1 ;
14  
15  空隙 ewq(int型 Iは、int型の Xは、int型 Yの)// X-Yの周りでプラスにI 
16  {
 17      のためにINT J = 0 ; J <N- J ++ 18は     、{
 。19          P [X] [J] + = I、
 20          P [J] [Y] + = I;
 21である         IF(X-Y + J> = 0 && N-> X - Y + J)
 22は         、{
 23が              P [X - Y + J] [J] + = I;
 24          }
 25          IF(YJ + X> = 0&& N> X + YJ 26          {
 27              P [X + YJ] [J] + = I。
28          }
 29      }
 30      P [X] [Y] - = 3 * I。
31  }
 32の 
33  空隙 PRI()// 打印解
34  {
 35      のためのint型私= 0 ; iがn <; Iは++ 36      {
 37          のためのint型 J = 0 ; J <N; J ++ 38              のprintf(" %dの"、((C [I] == J)?10 ));
 39          のprintf(" \ N- " );
 40      } 
 41である      のprintf(" \ N- " );
 42である }
 43が 
44である ボイド(pri_1)// 第二種は印刷
45  {
 46である      のprintf(" 番号D%\ N- "、N ++ );
 47      INT I = 0、I <N - 、I ++ 48      {
 49          のためにINT J =0 ; J <N; J ++ 50              のprintf(" %dの"、((C [J] == I)?10 ));
51          のprintf(" の\ n " );
52      }
 53  }
 54  
55  空隙 QWE(INT CUR)
 56  {
 57      のためにint型 i = 0 ; iがN <、iは++ 58      {
 59          であれば(P [CUR] [I]!)// 有位置
60          {
 61             C [CUR] = I; // マーク位置
62である             IF(N-CUR == - 1 63は             、{
 64                  pri_1();
 65                  続行;
 66              }
 67              ewq(1、CUR、I); // 名前を書く
68              QWE( + CUR 1。);
 69              ewq( - 1、CUR、I); // 名前キャンセル
70          }
 71である     }
 72  }
 73である 
74  
75  INT (メイン)
 76 {
 77      のmemset(P、0はsizeof (P))。
78      QWE(0 )。
79      リターン 0 ;
80 }

 

おすすめ

転載: www.cnblogs.com/li136/p/11616004.html
おすすめ