一共有三份**,
分別是只會寫迷宮時的、會寫dfs時的、動態規劃的,洛谷上對應的分數是40,60,100
這份**只是自己用來練習bfs的,執行的話只有40,資料過大會超時,還不是一般的超時,當m=n=20的時候,執行了一分鐘還沒結果。
用二維陣列表示棋盤,與題目的棋盤相比,加上了外圍的邊界,所以座標會有變化,比如:
原來座標:
改後坐標:
思路與迷宮完全相同
**如下:
#include #include更新一下,還沒有學會動態規劃,倒是dfs用熟練了,開o2有60分了,看來dfs是一定超時了o(╥﹏╥)o#include
#define maxsize 30typedef
enum abc dir; //
只有兩個方向可走
typedef struct
pos;
typedef
struct
stack;
intmatrix[maxsize][maxsize];
intmain()
for (int j = 0; j <= m + 2; j++)
//把馬和可能走到的位置標記為不能走
for (int i = 1; i <= n + 1; i++)
for (int j = 1; j <= m + 1; j++)
if(
abs(i - (xhouse + 1)) == 1 && abs(j - (yhouse + 1)) == 2 ||abs(i - (xhouse + 1)) == 2 && abs(j - (yhouse + 1)) == 1 ||i == xhouse + 1 && j == yhouse + 1
) matrix[i][j] = 1
; stack path;
path.top = -1
; path.data[++path.top].x = 1
; path.data[path.top].y = 1
; path.data[path.top].dir =right;
while (path.top > -1
)
else
switch
(top_pos.dir)
else
path.data[path.top].dir++;
break
;
case
down:
if (matrix[top_pos.x][top_pos.y + 1] == 0
)
else
path.data[path.top].dir++;
break
;
default
: path.data[--path.top].dir++;}}
printf("%d
", path_num);
return0;
}
#include #include最終還是放棄了dfs,改用動態規劃了,100分過了,但還是對dfs不死心啊#define maxsize 25
intmatrix[maxsize][maxsize];
intxhorse, yhorse, xterminal, yterminal;
long
long
sum;
void dfs(int xstart,int
ystart)
if (matrix[xstart + 1][ystart] == 1
) dfs(xstart + 1
, ystart);
if (matrix[xstart][ystart + 1] == 1
) dfs(xstart, ystart + 1);}
intmain()
else
matrix[i][j] = 1
; dfs(
0, 0
); printf(
"%lld
", sum);
return0;
}
#include #include#define maxsize 25
long
long
matrix[maxsize][maxsize];
intxhorse, yhorse, xterminal, yterminal;
intmain()
printf(
"%lld
", matrix[0][0
]);
return0;
}
過河卒 深度優先搜尋與遞推
題目描述 description 如圖,a 點有乙個過河卒,需要走到目標 b 點。卒行走規則 可以向下 或者向右。同時在棋盤上的任一點有乙個對方的馬 如上圖的c點 該馬所在的點和所有跳躍一步可達的點稱為對方馬的控制點。例如上圖 c 點上的馬可以控制 9 個點 圖中的p1,p2 p8 和 c 卒不能通...
過河卒演算法
過河卒基本思想 利用動態規劃轉空間為時間,利用動態規劃一般方法,把資料記錄下來,同時走兩條路線,只要不重合就好 include include include include define maxx a,b,c,d max max a,b max c,d using namespace std in...
過河卒 遞推
description 如圖,a 點有乙個過河卒,需要走到目標 b 點。卒行走規則 可以向下 或者向右。同時在棋盤上的任一點有乙個對方的馬 如上圖的c點 該馬所在的點和所有跳躍一步可達的點稱為對方馬的控制點。例如上圖 c 點上的馬可以控制 9 個點 圖中的p1,p2 p8 和 c 卒不能通過對方馬的...