洛谷P1605 迷宮

2021-10-02 09:04:28 字數 1704 閱讀 8765

題目背景

給定乙個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 這題是一題...