HDU 1175 LianliankanのDFS_が書かれたオリジナルタイトルの鼓動バイト

します。https://www.cnblogs.com/LQBZ/p/4253962.htmlに転載

問題の説明

「Lianliankanのは、」私は多くの人が演じてきたと信じています。チェス盤では、作品の多くを置く:私がゲームのルールをご紹介ここでは、重要ではありませんプレイしたことがありません。二つの同一の部分が(この行は、他の部分を通過することができない)一緒に接続され、2つ以下旋回ラインの回数ことができる場合、2つのピースはボード上の線によって除去することができます。私は申し訳ありません、私はLianliankanのをプレイしていなかったので、生徒たちに相談し、接続は外部から周りに行くことはできませんが、実際には、これは間違っています。今、災害につながる、それだけで間違っている、と周囲からの接続をバイパスすることはできません。
プレイヤーは、マウスをクリックして、それらを排除しようとし、2枚を持って、その後、2つの正方形を決定するために、ゲームの背景を排除することはできません。今すぐあなたのタスクは、デーモンを書くことです。

 

入力

入力データの複数のセット。各データセットの最初の行は、N 2つの正の整数であり、M(0 <N < = 1000,0 <M <1000)、 それぞれ、ボードの行と列の数。次のn行において、各行について説明非負整数mチェス盤市松分布を有します。0片の種類を表す正の整数であり、この位置はポーンではないことを示しています。次の行は、正の整数q(0 <Q <50)であり 、 以下のq番目の質問を表します。次の行で、Qは、それぞれの行は、4つの正の整数X1、Y1、X2、Y2を有し、X1は、行と列を排除することができ、最初の列片Y1×2 Y2行ピースの問い合わせを表します。N = 0、M = 0、入力の終わり。
注:お問い合わせの間に関係がない、現在の状態に向けられています!

 

出力

出力の一つの行に対応する入力データの各セット。私たちが「YES」の出力を排除することができた場合は、出力が「NO」にすることはできません。

 

 

サンプル入力

 

3 4
1 2 3 4
0 0 0 0
4 3 2 1
4
1 1 3 4
1 1 2 4
1 1 3 3
2 1 2 4
3 4
0 1 4 3
0 2 4 1
0 0 0 0
2
1 1 2 4
1 3 2 3
0 0
 
サンプル出力
はい
NO
NO
NO
NO
はい
タイトルは、比較的単純な処理はなく、外側の周りに、Lianliankanのコードである必要があり
 
     

1の#include <iostreamの>
2の#include <CStringの>
3の#define M 1010
名前空間stdを使用して4。
5 int型DIX [4] = {0,1,0、-1}。
[4] = {1,0、-1,0} DIY 6 INT; //方向
7 INTマップ[M] [M]; //建立地图
8ブールVID [M] [M]; //标记是否走过
9ブールフラグ。
10 int型N、M、Q、I、J、X1、X2、Y1、Y2、
11のint main()の
12 {
13の空隙DFS(int型のx、int型のY、INTターン、INT方向)。
14一方(CIN >> N >> M、N || M)
15 {
16のmemset(VID、0、はsizeof(VID))。
17(i = 1; I ++; iが= N <)
18(J = 1; J <= Mであり、j ++)
19 CIN >>マップ[I] [j]を。
20 CIN >> Q。
21一方、(Q - ){
22 CIN >> X1 >> Y1 >> X2 >> Y2。
23 IF(X1 ==×2 &&のY1 == Y2){
24 COUT <<」

26}開始点と終了点を解消することができない同じ時間//
27をIF(X1 <1 || X1 > N || Y1 <1 || Y1> M || X2 <1 || X2> N || Y2 <1 Y2 ||> M)
28 {
29 COUT << "NO" << ENDL;
30続行;
31を介してである} //私は試験し、この質問の例は、マップ外に存在する
(マップ[X1] [場合32 Y1 = =マップ[X2] [Y2] &&マップ[X1] [Y1])// 同じで実行する0に等しくないのデジタル開始位置と終了位置場合
33は、{
34がフラグ= 0である;
35(I = 0;私は<4; I ++は) //ここでは処理点から重要な4つの方向
36 DFS(X1、y1,0、I);
37 [IF(旗で!)
38はCOUT << "NO" <<てendlであり、
39}
40、他
41れます<< COUTは"NO" << ENDL;
42である}
43}である
; 44は0を返すことである
45}
46が空隙DFS(INTのX、Yはint、int型の電源を入れ、INT方向)である
47 {
48(フラグに)IF
49リターン;
50(X IF >N || X <1つの|| Y < 1 || Y> M || VID [X] [Y])//範囲外または場所を通って戻さ場合
51リターン。
52(ターン== 2 && Xなら = X2 && Y = Y2!)// 他の人からより良く剪定コピー
53を戻すある
54 ******************* /あります****************************
あなたは、回転方向の二つの方向を回すことができないとき55、私は、この剪定を説明します。
56だから、ときに現在位置と終了はしていない場合は、特殊な文に、ターン2回
、彼は返す57まっすぐな時間が所定の位置にないので、あなたがいない有効にしない
この特定の文章、最後までこの質問を可能に58剪定は良いですが、一部の人々は、カット
59と、この方法はほぼ同じになりますが、彼はその世代の方向を決定しなければならなかったので、
60ヤードの時間のビットのビット長すぎるドラッグに。
*********************************************** 61/
62 (ターン> 2)の場合は
63戻りあり;
64 {(X == X2 && Y == Y2は、<= 2ターン&&)場合
65 COUT << "YES" << ENDL、
フラグ66 = 1;
67リターン;
68}がある場合//が決定します端部
69 IF(マップ[X] [ Y]が0 =!)// ここでピット11 5555である
{70
71は、IF(X == Y == && X1とY1)であり、
72他返します。

74 VID [X] [Y] = 1;
75 INT DX、Dyを、Iは
(; Iは<4。I ++はI = 0)76
77 {
78 DX = X +ディックス[I];
79のDy = Y +のDIY ; [I]は
、同じ時間に同じ方向に操舵するとき80は、(i ==方向)///場合
81 DFS(DX、Dyを、ターン方向);
82 ///同じでない場合に他のステアリングを追加する
83 DFS(DX、Dyを、+ターン1、I。);
84}
85 VID [X] [Y]は= 0; ///パージマーカー覚え
86リターン;
87}
88 / *
89ビットテストデータが提供する
90 5 5
91であります。1 0 2 2 2
92 2 0 1 1 1
93 1 1 1 1 1
94 1 1 1 1 1
95 1 1 1 1 1
96 5
97 1. 1. 3. 1
98 1 1 3 2
99 1 1 2 3
100 1 1 2 4
101 5 1 5 1
102 8. 8
103 7 0 0 2 3 1 5 6
104 4 0 0 0 0 0 5 6
105 0 0 5 0 4 8 7 0
106 0 0 0 0 0 0 0 0
107 2 0 8 0 0 0 0 7
108 6 5 3 0 2 4 0 9
109 7 0 0 0 0 0 0 7
110 9 7 9 8 6 6 1 5
111 5
112 1 1 8 7
113 1 2 5 1
114 3 6 5 3
115 3 6 8 4
116 5 8 7 8
117 * /

 

 

 

おすすめ

転載: www.cnblogs.com/yichengming/p/11129368.html