題目描述
給出乙個n行m列的地圖,地圖形成乙個有n*m個格仔的矩陣。地圖中的空地用』.』表示。其中某些格仔有怪獸,用』+』表示。某人要從起點格仔』v』走到終點格仔』j』,他可以向上、下、左、右四個方向行走。因此,起點和終點之間可以有許多條路徑。注意:即使是有怪獸的格仔,他也可以走上去。 設路徑上某個格仔的座標為(r,c),某個怪獸的座標為(a,b),那麼它們之間的曼哈頓距離定義為:|r-a| + |c-b| 顯然,地圖上可能有許多怪獸,路徑上也可能途經許多格仔,每個格仔到每個怪獸都可以算出之間的曼哈頓距離。 問整條路徑中離怪獸的曼哈頓距離最小值最大為多少?
輸入 輸入格式: 第1行:2個整數n和m(1 ≤ n, m ≤ 500) 接下來n行,每行m個字元,可能是』.』, 『+』, 『v』, 『j』等. 資料保證僅包含1個』v』 和1個 『j』 ,至少有1個』+』
輸出 輸出格式: 第1行:1個整數,表示最短曼哈頓距離的最大值
樣例輸入
輸入樣例1:
4 4
+… ….
…. v..j
輸入樣例2
4 5
…..
.+++.
.+.+.
v+.j+
樣例輸出
輸出樣例一:
3
輸出樣例二:
0一開始yy到了很多方法:
強行求出每個點到最近怪獸的曼哈頓距離,pass
bfs一波,pass
…………
左撞右撞,終於想到了乙個正常的解法——二分答案
二分離怪獸的最短曼哈頓距離,將每個怪獸周圍曼哈頓距離等於其的,標記一下,用bfs驗證起點終點是否聯通,來實現放縮
算了一下時間複雜度,o(
n2lo
g(2n
))如果全屏怪獸,這種方法很危險,但沒辦法,資料好水哦,美滋滋~~~
**如下:
#include
#include
#include
#include
using
namespace
std;
struct nodemst[250001];
int m,n;
intmap[501][501];
int sx,sy,ex,ey,cnt;
int u[4]=,z[4]=;
void getmap()
}}void work(int mhd)
}bool bfs()
}return0;}
int main()
printf("%d",l);
}
奧特曼打小怪獸
由於奧特曼和小怪獸有相同的屬性,我把他們化成乙個類,怪物。通過這個類的呼叫,可以實現奧特曼與小怪獸的打鬥。package com.lovo 這是寫的奧特曼和小怪獸的共同類,由於他們共有相同的屬性,行為,所以歸為一類。author 杜海 public class guaiwu public void ...
小李打怪獸
小李對故鄉的思念全部化作了對霧霾天氣的怨念,這引起了掌控霧霾的邪神的極大不滿,邪神派去了乙隻小怪獸去對付小李,由於這只怪獸擁有極高的iq,它覺得直接消滅小李太沒有難度了,它決定要和小李在智力水平上一較高下。我們可否幫助小李來戰勝強大的怪獸呢?問題是這樣的 給定一堆正整數,要求你分成兩堆,兩堆數的和分...
CG MB 賓士怪獸
賓士 1 增加 obd 里程修復功能。目前支援儀表型別 c w204 glk x204 clk 207 e w212 sls 197 cls w218 r class w251 gl x164 ml w164 e class w211 cls w219 s class w221 cl 216 c c...