馬は一日行く(DFS)

馬は、中国で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 ] = { 212、 - 1、 - 21、 - 2、 - 1121、 - 2、 - 12、 - 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。
}

 

おすすめ

転載: www.cnblogs.com/Shallow-dream/p/11546275.html