时间限制: 1000 ms 空间限制: 262144 KB 具体限制
题目描述
Alice住在森林里,森林可以看作是N*M的网格,森林里有怪兽,用‘.’表示空地,‘+’表示怪兽,‘V’表示Alice现在的位置,‘J’表示Alice的家。
Alice可以从当前单元格向上下左右相邻单元格移动,有怪兽的地方也可以走,只不过比较危险,有怪兽的单元格对其他单元格会产生一定的危险系数,假设怪兽位置为(A,B),它对某单元格(R,C)的危险系数为:|R-A|+|C-B|,危险系数越小越危险,每个单元格的危险系数是所有怪兽对它产生的系数的最小值。
Alice请你帮她找一条最佳路径回家,即使得路径上经过单元格的最小的危险系数最大。
输入
输入第一行包含两个整数N和M(1<=N,M<=500),表示森林的大小。
接下来N行每行包含M个字符:‘.’,‘+’,‘V’,‘J’。
输入只包含一个‘V’和‘J’,而且至少有一个‘+’。
输出
输出最佳路径中最小的危险系数。
样例输入
输入1:
4 4
+。。。
。。。。
。。。。
V。。J
输入2:
4 5
。。。。。
。+++。
。+。+。
V+。J+
样例输出
输出1:
3
输出2:
0
数据范围限制
1<=N,M<=500
先广搜每个怪兽点,求出每个点的危险系数,注意:一个点第一次广搜到的值为它的危险系数,再二分答案,每次使用深搜check结果对错
AC代码
#include<cstdio>
#include<iostream>
#include<algorithm>
#include<cstring>
using namespace std;
bool dl[505][505],kz[505][505];
int mon[250005][2],x,y,fx[4]={
1,0,-1,0},fy[4]={
0,1,0,-1},z,v,len,wx[505][505],n,m,ans=0;
char mp[505][505];
void dfs(){
//二分答案+DFS求出最小危险系数的最大值
mon