題目背景
給定乙個n*m方格的迷宮,迷宮裡有t處障礙,障礙處不可通過。給定起點座標和終點座標,問: 每個方格最多經過1次,有多少種從起點座標到終點座標的方案。在迷宮中移動有上下左右四種方式,每次只能移動乙個方格。資料保證起點上沒有障礙。
題目描述
無輸入格式
第一行n、m和t,n為行,m為列,t為障礙總數。第二行起點座標sx,sy,終點座標fx,fy。接下來t行,每行為障礙點的座標。
輸出格式
給定起點座標和終點座標,問每個方格最多經過1次,從起點座標到終點座標的方案總數。
輸入輸出樣例
輸入 #1 複製
2 2 1
1 1 2 2
1 2輸出 #1 複製
1說明/提示
【資料規模】
1≤n,m≤5
首先是我寫的**
#include
#include
#include
#include
#include
using
namespace std;
int m,n,t,cnt=0;
bool board[6]
[6]=
,vis[6]
[6]=
;struct vsta,rig,ob;
void
sol(
int x,
int y)
vis[x]
[y]=1;
sol(x-
1,y)
;sol
(x+1
,y);
sol(x,y+1)
;sol
(x,y-1)
; vis[x]
[y]=0;
//回溯這一步很關鍵,跟裝船那道題一樣,為啥,函式末尾了有啥可回溯的
}int
main()
sol(sta.x,sta.y)
; cout
}
問題就是如上所述,不能理解為什麼末尾要回溯,回溯完了給誰用呢?
下面是洛谷上看到的解法
#include
using
namespace std;
int go[4]
[2]=
;int n,m,t,x1,y1,x2,y2,f[6]
[6],q[6]
[6],ans;
void
dfs(
int x,
int y)}}
}int
main()
q[x1]
[y1]=1
; ans=0;
dfs(x1,y1)
; cout
}
好像別人給的這個解像是拔牙那種遞迴了,這裡的回溯看起來合情合理,但這兩種解法應該是一致的,所以說,問題在於?
對於函式呼叫的認知錯誤
#include
using
namespace std;
voidy(
)voidt(
)voido(
)int
main
(int argc,
const
char
* ar**)
洛谷 P1605 迷宮
問題描述 給定乙個n m方格的迷宮,迷宮裡有t處障礙,障礙處不可通過。給定起點座標和 終點座標,問 每個方格最多經過1次,有多少種從起點座標到終點座標的方案。在迷宮 中移動有上下左右四種方式,每次只能移動乙個方格。資料保證起點上沒有障礙。輸入樣例 輸出樣例 資料規模 1 n,m 5 題目描述 輸入輸...
洛谷 P1605 迷宮
題目背景 迷宮 問題描述 給定乙個n m方格的迷宮,迷宮裡有t處障礙,障礙處不可通過。給定起點座標和 終點座標,問 每個方格最多經過1次,有多少種從起點座標到終點座標的方案。在迷宮 中移動有上下左右四種方式,每次只能移動乙個方格。資料保證起點上沒有障礙。輸入樣例 輸出樣例 資料規模 1 n,m 5 ...
洛谷p1605迷宮
迷宮 問題描述 給定乙個n m方格的迷宮,迷宮裡有t處障礙,障礙處不可通過。給定起點座標和 終點座標,問 每個方格最多經過1次,有多少種從起點座標到終點座標的方案。在迷宮 中移動有上下左右四種方式,每次只能移動乙個方格。資料保證起點上沒有障礙。輸入樣例 輸出樣例 資料規模 1 n,m 5 這題是一題...