ある日、ニンニク王は彼が王子になったことを夢見ていたが、残念ながら、その厄介な魔女姫を捕らえました。だから、その国のニンニク王の力を使用し、彼の王女は、迷路の魔女に巻き込まれました。唯一のニンニク王が存在するため、彼は迷路の外の壁を登ることができ、ニンニク王は王女にかかった自分の民を救うために旅を所有します。
それは魔女をたまたま通り迷路が大きくない二人が互いに接近し始めたので、ニンニク王と王女は、直接話をすることができます。各ステップは、だけでなく配置されている壁の位置に、上下、四方に向かって1つの宇宙遊泳を移動することができます。6月ニンニク姫を救うために熱心に、1は、(壁の迷路全体に許可)1つの方向に2つのステップを取る必要があります;、王女は弱いだけで、さらに一歩を行くことができます。Q.では、この迷路、あなたは(王の後にニンニクと王女は王女は迷路を脱出することができます運ぶ、会っ)姫6月ニンニクを救うことができるかどうか。
入力形式
入力の最初の2行目の整数N(1≤n≤100)、M(1≤m≤100)行と列、迷路。
次いで、N×M、マップのマップがある ''、 '#'、 'W'、 'G' はこれら四つの成分。'通行道路を表し、「プリンセスが始まった位置を表し、G「」、王子が始まった位置を示す」W#「は、迷路の壁を示しています」。
出力フォーマット
プリンス出力は、彼らは、「なし」そうでない場合は、出力を出力「はい」を救うことができない場合は、彼の王女を保存することはできません。
サンプル入力
1 8 wの....#、G
サンプル出力
はい
2件の検索を実行方法:
王子の最初の検索、王子達することができるすべてのタグ。
その後、王子と王女説明の2番目の検索、王女がマークポイントに到達することができれば王子は、姫を救出することができます。
1の#include <stdio.hの> 2の#include < ストリング・H> 3の#include <iostreamの> 4の#include < ストリング > 5の#include <math.h>の 6の#include <アルゴリズム> 7の#include <ベクトル> 8#含む<スタック> 9の#include <キュー> 10の#include < セット > 11の#include <地図> 12の#include <sstream提供さ> 13 のconst int型 INF = 0x3f3f3f3f 。 14 typedefの長い 長いLL。 const int型 MOD = 1E9 + 7 。 16 CONST ダブル PI = ACOS( - 1 )。 17の CONST ダブル EPS = 1E- 8 。 18 の#defineバグCOUT << "---------------------" << ENDL 19 CONST INT MAXN = 1E5 + 10 。 20 使って 名前空間はstdを、 21 22 CHAR G [ 105 ] [ 105 ]。 23 INT VIS [ 105 ] [ 105 ] [ 2 ]。 24 INTN、M。 25 INT フラグ。 26 27 INT NT [ 4 ] [ 2 ] = {{ - 1、0 }、{ 0、1 }、{ 1、0 }、{ 0、 - 1 }}。 28の 29 空隙 DFS(int型のx、int型 Y、INT ) 30 { 31 であれば(== 0 && VIS [X] [Y] [ 1 ] == 1)フラグ= 1 。 32 のために(INT iは= 0 ; iは< 4 ; I ++ ) 33 { 34 INT XX = X + NT [i]が[ 0 ] +誰* NT [I] [ 0 ]。 35 INT YY = Y + NT [I] [ 1 ] +誰* NT [I] [ 1 ]。 36 であれば(XX> 0 && XX <= N && YY> 0 && YY <= M &&!VIS [XX] [YY] [] && G [XX] [YY]!= ' #' ) 37 { 38 VIS [XX] [YY] [誰] = 1 。 39 DFS(XX、YY)。 42 } 43 44 のint main()の 45 { 46 の#ifdefデバッグ 47 freopenは(" SAMPLE.TXT "、" R " 、STDIN)。 48 #endifの 49 ios_base :: sync_with_stdio(偽); 50 cin.tie(NULL)。 51 52 のscanf(" %D%D "、&N、&M)。 53 int型WX、WY、GX、GY。 54 のために(INT iが= 1 ; iが<= N; I ++ ) 55 { 56 GETCHAR()。 57 のために(INT J = 1 ; J <= Mであり、j ++ ) 58 { 59 のscanf(" %のC "、&G [I] [J])。 60 であれば(G [I] [J] == ' W ')WX = I、WY = J。 61 であれば(G [I] [J] == ' G ')GX = I、GY = J。 62 } 63 } 64 VIS [WX] [WY] [ 1 ] = 1 。 65の DFS(WX、WY、1); 66 VIS [GX] [GY] [ 0 ] = 1 ; 67の DFS(GX、GY、0 ); 68 であれば(フラグ)のprintf(" はい\ N " ); 69 他のprintf(" なし\ N " ); 70 リターン 0 ; 71 }
-