トピックポータル
問題解決のアイデア:
8人の女王とスラッシュを記録せずに、この質問を除いて、非常に似ていますが、それぞれのグリッドを記録するために、それぞれの位置に番号を記入しなければなりません。
ACコード:
1の#include <cstdioを> 2の#include <iostreamの> 3の#include <cstdlib> 4 5 使用 名前空間STD。 6 7 INT [ 10 ] [ 10 ]。 8 ブール H [ 10 ] [ 10 ]、L [ 10 ] [ 10 ]、G [ 10 ] [ 10 ]。 9 10インラインボイドプリント(){ 11 のために(int型 i = 1 ; iが<= 9 ; iは++ ){ 12 用(INTの J = 1 ; J <= 9 ; J ++ ) 13 のprintf(" %dの" 、[I] [J])。 14 のprintf(" の\ n " ); 15 } 16 出口(0 ); 17 } 18の 19インラインボイド DFS(int型のx、int型のY){ 20 であれば([X] [Y]!= 0 ){ 21 場合(Xの== 9 &&のy == 9 ) 22 プリント()。 23 他 24 であれば(Y軸== 9 ) 25の DFS(X + 1、1 )。 26の 他 27 DFS(X、Y + 1 )。 28 } 29 場合([X] [Y] == 0 ){ 30 のための(int型 i = 1 ; iが<= 9 ; I ++ ){ 31 なら!(H [I] [X] && L [I] [Y] &&!G [i]の[(X- 1)/ 3 * 3 +(Y- 1)/ 3 + 1 ]){ 32 [X] [Y] = I。 33 時間[I]は、[X] = 1 。 34 [I] [Y]は、L = 1 。 35 G [i]の[(X- 1)/ 3 * 3 +(Y- 1)/ 3 + 1 ] = 1 。 36 場合(Xの== 9 &&のy == 9 ) 37 プリント()。 38 であれば(Y軸== 9 ) 39 DFS(X + 1、1 )。 40の 他 41 DFS(X、Y + 1 )。 42 [X] [Y] = 0 ; 43 時間[I]は、[X] = 0 。 44 [I] [Y]はL = 0 、 45 G [i]の[(X- 1)/ 3 * 3 +(Y- 1)/ 3 + 1 ] = 0 ; 46 } 47 } 48 } 49 } 50 51 のint main()の 52 { 53 のために(int型 i = 1 ; iが<= 9 ; I ++ ) 54 のための(INT J = 1 ; J <= 9 ; J ++ ){ 55 のscanf(" %dの"、&[ I] [J]); 56 時間[I] [J] [I] = 1 [I] [J] [J] = G [I] [J]] [(I- 1)/ 3 * 3 + (J- 1)/ 3 + 1 ] = 1 。 57 } 58の DFS(1、1 )。 59 リターン 0 ; 60 }