馬は、中国でB形状にチェスのルールを移動しました。
プログラムは、所与の基板サイズn×m個、及び馬の初期位置(x、y)を書いてください、要求はボード上の同じ点を通して繰り返すことができない、馬は計算することができるどのように多くのルートボード上のすべての点を通ります。
入力最初の行の整数T(T <10)は、テスト・データ・セットの数を示します。
テストデータの各セットは、4つの整数の行が含まれ、それぞれ、基板サイズと初期位置がN、M、X、Y座標。(0 <= X <= N -1,0 <= Y <= M-1、M <10、N <10)出力各行を含む試験データ、整数であり、馬の総数は、ルートボード表現を横断することができ、 0は一度横断することはできません。サンプル入力
1 5 4 0 0
サンプル出力
32
書式#include <iostreamの> の#include <アルゴリズム> 書式#include <cstdioを> する#include < 文字列 > の#include <CStringの> の#include <cstdlib> 書式#include <マップ> 書式#include <ベクトル> の#include < 設定 > 書式#include <キュー> 書式#include <スタック> の#include <cmath> 使用して 名前空間はstdを、 #define TLEのstd ::イオス:: sync_with_stdio(偽); cin.tie(NULL); cout.tie(NULL); #define PQ PRIORITY_QUEUE <整数> pqn PRIORITY_QUEUE <ノード> の#define Vベクター<整数> の#define VLベクター<LL> の#define LSONのRT << 1、L、M の#define rsonのRT << 1 | 1、M + 1、R用 の#define読み出す(X )のscanf( "%dの"、およびX) の#define LREAD(X)のscanf( "%のLLD"、&x)は、 #define PT(X)のprintf( "%d個の\ n"、(X)) の#defineイエスのprintf( "YES \ n"); #defineなしのprintf( "NOの\ n"); #define GCD __gcd の#define MEM(S、T)のmemset(S、T、はsizeof(S)) の#define CN CIN >> の#define CT COUT << の#define OK戻り0; #defineリターン再; #define担当者(J、K)のための(iは= INT(INT)〜(j)は、iが=(INT)(k)を<; Iは++) の#defineの入力(k)を(I = 1をint型、iが=(INTを<)( K); iは++){CIN >> [I]。} の#define MOD(x)は、((X)%9973) の#define試験COUT << "++++++" << ENDL。 typedefの長い 長いLL。 const int型 MAXN = 10000 + 5 。 INT DIR [ 4 ] [ 2 ] = { 1、0、 - 1、0、0、1、0、 - 1 }。// 单位移动 int型 DR [8 ] [ 2 ] = { 2、1、2、 - 1、 - 2、1、 - 2、 - 1、1、2、 - 1、2、1、 - 2、 - 1、 - 2 }。// 马走日 のint VIS [ 11 ] [ 11 ]。 int型、T、N、M、X、Y、ANS、CNT。 ボイド DFS(INT R、INT C) { もし(ANS ==のN×m個){CNT ++ ;再;} ため(int型 i = 0 ; iは< 8 ; iは++ ) { int型 NX = R + DR [i]が[ 0 ]。 INT NY = C + DR [I] [ 1 ]。 もし(!VIS [NX] [NY] && NX <= N &&がnx> 0 && NY <= M && NY> 0 ) { ANS ++ 。 VIS [NX] [nyは] = 1 。 DFS(NX、NY)。 VIS [NX] [nyは] = 0 。 ANS - ; } } } int型のmain() { TLE。 用(; T; CIN >> T t-- ) { ANS = 1 ; CNT = 0 。 CIN >> N >> M >> X >> Y。 以下のために(int型 i = 0 ; iが<= N; I ++ ) のための(INT J = 0 ; J <= Mであり、j ++ ) VIS [I] [J] = 0 ; VIS [X + 1 ] [Y + 1 ] = 1 。 DFS(X 1+ 、Y + 1 )。 coutの << CNT << てendl; } 0を返します。 }