洛谷1605 迷宮 解題報告

2022-05-06 05:39:08 字數 1837 閱讀 9157

迷宮 【問題描述】 給定乙個n*m方格的迷宮,迷宮裡有t處障礙,障礙處不可通過。給定起點座標和 終點座標,問: 每個方格最多經過1次,有多少種從起點座標到終點座標的方案。在迷宮 中移動有上下左右四種方式,每次只能移動乙個方格。資料保證起點上沒有障礙。 輸入樣例 輸出樣例 【資料規模】 1≤n,m≤5

輸入格式:

【輸入】

第一行n、m和t,n為行,m為列,t為障礙總數。第二行起點座標sx,sy,終點

座標fx,fy。接下來t行,每行為障礙點的座標。

輸出格式:

【輸出】

給定起點座標和終點座標,問每個方格最多經過1次,從起點座標到終點座標的方

案總數。

輸入樣例#1:

2 2 1

1 1 2 2

1 2

輸出樣例#1:

1
深搜dfs

純回溯題。

先把障礙標記好,然後從起點開始,往下dfs,當遇到障礙或走到邊界時,返回上一層,繼續往另乙個方向走。

當到達終點時,將方案數+1,繼續過程,直到結束。

ps:dfs就是這樣一種走不通就掉頭的搜尋模式。雖然比較耗時,但在缺乏有效方法是,dfs也不失為一種選擇。

搜尋也是一種很萬能的解題方法,好多題都可以用它來解決(雖然不一定是最優方案)。

下面附上**。

program d1;    

var    

a,d:array[1..1000,1..1000] of longint;    

b,c:array[1..4] of longint;    

n,m,l,p,x,y,f,k,i:longint;    

procedure sou(x,y:longint);           //深搜    

var    

i:longint;    

begin    

if a[x,y]=1 then begin     

f:=f+1;    

exit;    

end;    

for i:=1 to 4 do    

if (x+b[i]>0) and (x+b[i]<=n) and (y+c[i]>0) and (y+c[i]<=m) and (a[x+b[i],y+c[i]]<>2) and (d[x+b[i],y+c[i]]<>1)then begin    

d[x+b[i],y+c[i]]:=1;    

sou(x+b[i],y+c[i]);    

d[x+b[i],y+c[i]]:=0;    

end;    

end;    

begin    

readln(n,m,k);    

readln(x,y,l,p);    

a[l,p]:=1;    

for i:=1 to k do    

begin    

read(l,p);    

a[l,p]:=2;    

end;    

b[1]:=1;    

c[1]:=0;    

b[2]:=0;    

c[2]:=1;    

b[3]:=-1;    

c[3]:=0;    

b[4]:=0;    

c[4]:=-1;   //方位    

d[x,y]:=1;   //初始化    

sou(x,y);    

write(f);    

end.    

搜尋 洛谷1605迷宮

給定乙個n m方格的迷宮,迷宮裡有t處障礙,障礙處不可通過。給定起點座標和終點座標,問 每個方格最多經過1次,有多少種從起點座標到終點座標的方案。在迷宮中移動有上下左右四種方式,每次只能移動乙個方格。資料保證起點上沒有障礙。第一行n m和t,n為行,m為列,t為障礙總數。第二行起點座標sx,sy,終...

洛谷 P1605 迷宮

問題描述 給定乙個n m方格的迷宮,迷宮裡有t處障礙,障礙處不可通過。給定起點座標和 終點座標,問 每個方格最多經過1次,有多少種從起點座標到終點座標的方案。在迷宮 中移動有上下左右四種方式,每次只能移動乙個方格。資料保證起點上沒有障礙。輸入樣例 輸出樣例 資料規模 1 n,m 5 題目描述 輸入輸...

洛谷 P1605 迷宮

題目背景 迷宮 問題描述 給定乙個n m方格的迷宮,迷宮裡有t處障礙,障礙處不可通過。給定起點座標和 終點座標,問 每個方格最多經過1次,有多少種從起點座標到終點座標的方案。在迷宮 中移動有上下左右四種方式,每次只能移動乙個方格。資料保證起點上沒有障礙。輸入樣例 輸出樣例 資料規模 1 n,m 5 ...