有了上次題目看錯的教訓後再不敢隨便看題了usaco太坑,這題絕對不水,傳送門還特別玄學自然**短不了…
**:
const z:array[1..4,1..2]of -1..1=((1,0),(0,1),(-1,0),(0,-1));
var i,j,k:longint;
m,n:longint;
pdx,pdy:longint;
csmx,csmy:array['a'..'z',0..1]of longint;
a,boo:array[-1..1000,-1..1000]of boolean;
b:array[-1..1000,0..1000]of longint;
h,t:longint;
ch:char;
fx,fy,lx,ly:longint;
x,y,u,p:array[0..4000000]of longint;//開大一點
begin
readln(m,n);
for i:=1 to m do
begin
for j:=1 to n do
begin
read(ch);
if ch='@' then
begin
fx:=i;
fy:=j;
a[i,j]:=false;
end;
if ch='=' then
begin
lx:=i;
ly:=j;
a[i,j]:=true;
end;
if ch='#' then
begin
a[i,j]:=false;
end;
if ch='.' then
begin
a[i,j]:=true;
end;
if ch in ['a'..'z'] then//判斷傳送門
begin
a[i,j]:=true;
if csmx[ch,0]<>0 then//如果還沒有找到同字母的傳送門
begin
csmx[ch,1]:=i;
csmy[ch,1]:=j;
b[i,j]:=ord(ch)*10;
endelse//找到過了
begin
csmx[ch,0]:=i;
csmy[ch,0]:=j;
b[i,j]:=ord(ch)*10+1;
end;
endelse
b[i,j]:=0;
end;
readln;
end;
h:=1;
t:=1;
u[1]:=0;
x[1]:=fx;
y[1]:=fy;
repeat
if (x[t]=lx) and (y[t]=ly) then
begin
writeln(u[t]);
exit;
end;
if (b[x[t],y[t]]<>0) and (p[t]=0) then//因為有傳送門必須走,所以直接修改尾巴上的值
if (a[csmx[chr(b[x[t],y[t]] div 10),b[x[t],y[t]] mod 10],
csmy[chr(b[x[t],y[t]] div 10),b[x[t],y[t]] mod 10]]) then//感覺有點眼酸...
begin
pdx:=csmx[chr(b[x[t],y[t]] div 10),b[x[t],y[t]] mod 10];//記錄
pdy:=csmy[chr(b[x[t],y[t]] div 10),b[x[t],y[t]] mod 10];
x[t]:=pdx;
y[t]:=pdy;
p[t]:=1;
end;
if (b[x[t],y[t]]=0) or (p[t]=1) then//接下來就很簡單了
for i:=1 to 4 do
if a[x[t]+z[i,1],y[t]+z[i,2]] then
begin
inc(h);
x[h]:=x[t]+z[i,1];
y[h]:=y[t]+z[i,2];
p[h]:=0;
u[h]:=u[t]+1;
if b[x[h],y[h]]=0 then//有傳送門不可以賦為false,因為可能這只是乙個中轉站
a[x[h],y[h]]:=false;
end;
inc(t);
until t>h;
end.
如果不理解
有傳送門不可以賦為false,因為可能這只是乙個中轉站則舉乙個例子
###=###
#.....#
###a###
#.....#
#@#####
###a..#
#######
a,a一對傳送門。
要先進入a從a出來,再進人a從a出來,不然不可以到終點,a就是乙個中轉站。
USACO 玉公尺田迷宮 Corn Maze
移步到新blog檢視 此blog已廢棄,已失效 這題是乙個大坑。首先我們想到了bfs,這個題就是乙個簡單到不能再簡單的maze加上傳送門就是了。但是有一點是傳送門不費時啊!什麼鬼。所以我們要先判傳送門 為什麼呢?我記得有一組測試資料報括了這種情況 這不清真 另外,好像還有乙個點是全都是傳送門的情況。...
P1879 玉公尺田Corn Fields題解
農場主john新買了一塊長方形的新牧場,這塊牧場被劃分成m行n列 1 m 12 1 n 12 每一格都是一塊正方形的土地。john打算在牧場上的某幾格里種上美味的草,供他的奶牛們享用。遺憾的是,有些土地相當貧瘠,不能用來種草。並且,奶牛們喜歡獨佔一塊草地的感覺,於是john不會選擇兩塊相鄰的土地,也...
方伯伯的玉公尺田
例題 方伯伯的玉公尺田 一位大佬的鏈結 有關二維樹狀陣列 關於我做這道題的心路歷程 1.我在某個晚上準備練習dp題,看到方伯伯的玉公尺田這 道題,難度適宜,知識簡單,準備做一做。乙個晚上過去 了,我除了推出了他每一次會抬高最右邊的玉公尺外,還推 出了一大堆錯誤結論,例如一定會從已有的上公升序列中的 ...