王女保存総旅客ニンニク王子

 

ある日、ニンニク王は彼が王子になったことを夢見ていたが、残念ながら、その厄介な魔女姫を捕らえました。だから、その国のニンニク王の力を使用し、彼の王女は、迷路の魔女に巻き込まれました。唯一のニンニク王が存在するため、彼は迷路の外の壁を登ることができ、ニンニク王は王女にかかった自分の民を救うために旅を所有します。

それは魔女をたまたま通り迷路が大きくない二人が互いに接近し始めたので、ニンニク王と王女は、直接話をすることができます。各ステップは、だけでなく配置されている壁の位置に、上下、四方に向かって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 ] = {{ - 10 }、{ 01 }、{ 10 }、{ 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 }

 

 

 

 

-

おすすめ

転載: www.cnblogs.com/jiamian/p/12173894.html