馬は、中国で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 ULL符号なしの長い長い の#define LLI長い長い の#define PQ PRIORITY_QUEUE <整数> #define pqn PRIORITY_QUEUE <ノード> の#define Vベクター<整数> の#define VLベクター<LL> の#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アウト(X)COUT << X << ENDL。 #defineはcout <<てendlを超えます。 #define(; iが=(INT)(k)を<I ++はiは= INT(INT)(J))のための担当者(J、K) の#define入力(K)(I = 1をint型のために、私は=(INTを< )(K); iは++){scanf関数( "%のD"、および[I])。 #defineし、[OK]リターン0; #define TLEのstd ::イオス:: sync_with_stdio(偽); cin.tie(NULL); cout.tie(NULL); #define MOD(x)は、((X)%9973) の#define試験COUT << "++++++" << ENDL。 // 二叉树 の#define LSONのRT << 1、L、M の#define rsonのRT << 1 | 1、M + 1、R // 线段树 の#define LS今<< 1つ の#define RS今<< 1 | 1 / / INT DIR [4] [2] = {1,0、-1,0,0,1,0、-1}。// 单位移动 INT DIR [ 8 ] [ 2 ] = { 2、1、2、 - 1、 - 2、1、 - 2、 - 1、1、2、1、 - 2、 - 1、2、 - 1、 - 2 }。 int型、T、N、M、K、X、Y、COL、EX、EY、ANS、CNT。 int型 [ 202 ] [ 202 ]、B [ 202 ] [ 202 ]。 int型 VIS [ 11 ] [ 11 ]。 構造体ノード{ int型X、Y、T;}; ボイド DFS(INT R、INT C) { もし(ANS> = N * M){CNT ++。返す;} ため(int型 i = 0 ; iは< 8 ; I ++ ) { int型 NX = R + DIR [I] [ 0 ]。 INT NY = C + DIR [I] [ 1 ]。 もし(NX < 0 || NY < 0 ||がnx> = N || NY> = M)続けます。 もし(!VIS [NX] [NY]) { VIS [NX] [nyは] = 1 。 ANS ++ ; DFS(NX、NY)。 ANS -; VIS [NX] [nyは] = 0 。 } } } int型のmain() { CIN >> T。 一方、(t-- ) { CIN >> N >> M >> X >> Y。 以下のために(int型 i = 0 ; iがn <; I ++ ) のための(INT J = 0 ; J <M、J ++ ) VIS [I] [J] = 0 ; VIS [X] [Y] = 1 。 ANS = 1; CNT = 0 。 DFS(X、Y) coutの << CNT << てendl; } OK。 }