URL:https://vjudge.net/problem/HDU-2612
質問の意味:
分布マップは、いくつかのKCFは(?)、マップ上の出発点で、2人がいる「#」、彼らがグリッドを歩くことができない、「」表現は、見に行くことができます「@」生き先を表しています。支払うために価格を移動開始点から二人は、$ 1 $で、コストと最小値を求め、互いの出発点を渡すことはできません。
ソリューション:
二人の男は、その後、列挙BFS最小に走った後の図が組み込まれています。
ACコード:
書式#include <iostreamの> の#include <キュー> の#include <CStringの> 名前空間stdを使用。 int型のDEP1 [40005]、DEP2 [40005]; チャーCH [205] [205]。 DIR INT [4] [2] = {{0,1}、{1,0}、{0、-1}、{ - 1,0}}。 INTのN、M、L、B。 int型のres [40005]; BOOLチェック(int型のx、int型のY、チャーS) { (x> = N || X <0 || Y> = M || Y <0)の場合は falseを返します。 IF(CH [X] [Y] == '#' || CH [X] [Y] == S) falseを返します。 trueを返します。 } ボイドプリント(INT * DEP) { (I = 0 int型、iがN <; ++ i)が用 { ため(INT J = 0; J <M; ++ j)は COUT << DEP [iがM * + J ] <<」「; coutの<<てendl; } } 無効BFS(int型の、 キュー<整数> QUE。 DEP [S] = 1。 que.push(S); (!que.empty())、一方 { INT T = que.front()。 que.pop(); // coutの<< "T =" <<トン<<てendl; INT X = T / M、Yは、T%mを=。 // COUT << X <<」「<< Y << ENDL。 (++ iは; iが4 <I 0 = INT)のために { IF(チェック(X + DIR [I] [0]、Y + DIR [I] [1]、K)) (DEP [(X +ならDIR [I] [0])* M + Y + DIR [I] [1]] == 0) { // COUT <<(X + DIRを[I] [0])* M <<」「<< Y + DIR [I] [1] << ENDL。 DEP [(X + DIR [i]が[0])* M + Y + DIR [I] [1] = DEP [T] +1。 que.push((X + DIR [i]が[0])* M + Y + DIR [I] [1])。 //印刷(DEP)。 // coutの<<てendl; } } } // COUT << ENDL。 } ボイド()を解きます { INT ANS = 0x3f3f3f3f。 以下のために(; iはi = 0 int型<Lを、++ I) IF(DEP1 [RES [I]] && DEP2 [RES [I]] && ANS> DEP1 [RES [I] + DEP2 [RES [I]) ANS = DEP1 [RES [I] + DEP2 [RES [I]]。 COUT <<(ANS-2)* 11 << ENDL。 } int型のmain() { 一方(CIN >> N >> M) { memsetの(CH、0、はsizeof(CH))。 memset(dep1,0、はsizeof(DEP1))。 memset(dep2,0、はsizeof(DEP2))。 L = 0。 (; iがN <++ iが0 = INT)のため のために(INT J = 0; J <M; ++ j)は { CIN >> CH [I] [J]。 (CH [I] [J] == 'Y')もし = iが+ M * J。 そうであれば(CH [I] [J] == 'M') B = iがjで+ M *。 他の(CH [I] [J] ==もし'@' ) RES [L ++] = iはJ *を+ M。 } / *(; iがN <++ I I = 0をINT)のための { (INT J = 0であり、j <M; ++ j)のための COUT << CH [I] [J] <<」「。 coutの<<てendl; } COUT << L << " "<< <<" "<< B <<"" << ENDL。 (; iがLに<++ iはi = 0の整数)のための COUT << RES [I] << ENDL; * / BFS(DEP1、 'M')。 BFS(B、DEP2、 'Y'); 解決する(); } 0を返します。 }