description
給定乙個一定存在從起點到終點的路徑的四聯通迷宮。已知tar左右方向移動的時間為1,上下移動的時間為未知實數v。求當tar從起點到終點的最短移動時間為已知實數l時,未知實數v是多少。
input
輸入資料報含多個測試點。第一行為乙個整數t,表示測試點的數目。
對於每乙個測試點,第一行包含實數l和兩個整數r,c。r為迷宮的上下長度,c為迷宮的左右長度。
之後的r行,每行包含c個字元。其中空格表示空地,s表示起點,e表示終點,#表示圍牆。
output
對於每乙個測試點,在單獨的一行內輸出未知實數v,輸出保留5位小數。
sample input
2sample output2.5 4 5
#####
#s #
# e#
#####
21 13 12
############
#s## #e#
# ## # # #
# # # # #
### # # # #
# # # # #
# ## # # #
## # # # #
### # # # #
## # # # #
# ## # #
# # #
############
0.50000data constraint0.21053
20%的資料,1≤ r,c ≤ 10。
100%的資料,1≤ r,c ≤ 100,0≤ v <10。
分析二分+記憶化搜尋,注意bfs中已在佇列中的不要反覆加入,會t
#include #includeview code#include
#include
using
namespace
std;
const
int n=110
;struct
point s,e;
int dx[4]=,dy[4]=;
double
f[n][n];
char
ch[n][n];
intt,r,c;
double
l,v;
bool
inqueue[n][n];
double
cost(point a,point b)
bool
judge(point a,point b)
void
bfs() )) ;
f[to.x][to.y]=f[p.x][p.y]+cost(p,to);
if (!inqueue[to.x][to.y]) q.push(to);
inqueue[to.x][to.y]=1
; }
inqueue[p.x][p.y]=0
; }
}int
main()
while (ch[i][j]!='
#'&&ch[i][j]!='
e'&&ch[i][j]!='
s'&&ch[i][j]!='');
if (ch[i][j]=='
e') e.x=i,e.y=j;
if (ch[i][j]=='
s') s.x=i,s.y=j;
}double ll=1e-7,rr=10.0
;
while (rr-ll>=1e-7
) printf(
"%.5lf\n
",v);}}
jzoj3522 迷宮花園 二分 spfa
description 給定乙個一定存在從起點到終點的路徑的四聯通迷宮。已知tar左右方向移動的時間為1,上下移動的時間為未知實數v。求當tar從起點到終點的最短移動時間為已知實數l時,未知實數v是多少。input 輸入資料報含多個測試點。第一行為乙個整數t,表示測試點的數目。對於每乙個測試點,第一...
JZOJ 二分 抄書
與書的複製差不多 洛谷 書的複製 但是只要輸出最大的時間 樣例輸入9 3 100 200 300 400 500 600 700 800 900樣例輸出1700樣例解釋1 1500 100 200 300 400 500 2 1300 600 700 3 1700 800 900 1300 1500...
二分搜素演算法
二分搜尋演算法的三種情況 推薦部落格,真的寫的非常好!1 當陣列中沒有重複元素時 public int binarysearchimplement int array,int target else if array mid target else if flag return index else...