本人當初只是想到用搜尋做,上手就是bfs結果wa了,後來反應過來只能用dfs來做
提交了21次,全tle,後來在多次努力下找到了大量的陷阱,為還在為此題困擾的人指指路
1.奇偶剪枝
很簡單的乙個概念
設起點座標是bx,by;終點座標是ex,ey;
最短路徑是abs(bx-ex)+abs(by-ey)
但是我們可以很顯然的看出來,無論是走,我們的步數肯定比最短路徑數多乙個偶數
所以,簡化的第一點來了:如果題目中輸入的步數比最短路徑數多得是乙個奇數,那麼我們永遠也不可能走到,所以直接輸出no;
2.路徑剪枝
在dfs當前的過程的路數中一旦大於等於要求的步數並且還沒有找到終點,直接輸出no
3.最讓人後怕的一點
我從自學dfs以來一直沒有注意到有一點非常的害怕,dfs是用遞迴實現的,那麼如果我們找到了終點並且路數也符合,不能只是讓指示變數變值那麼簡單
我們要在每次遞迴返回後面再加上乙個判斷,目的是終止查詢,如果不這樣做,就算找到了結果是yes我們也必須等到整個圖全部被掃瞄完才可以結束程式
自然而然就會tle了
附上ac**
#include"iostream"
#include"cstdio"
#include"cstring"
using namespace std;
char map[10][10];
int book[10][10];
int n,m,t;
int flag=0;
int nextk[4][2]=,,,};
int bx,by;
int ex,ey;
int w;
void dfs(int x,int y,int len)
if(len>=t) //路徑剪枝
else
else
book[dx][dy]=0;}}
}}}int main()
else
if(map[i][j]=='d')}}
w=abs(ex-bx)+abs(ey-by);
if((t-w)%2==1); //奇偶剪枝
else
if(flag==1)
else }
}return 0;
}
一道比較經典的迷宮問題
現在有乙個城市銷售經理,需要從公司出發,去拜訪市內的商家,已知他的位置以及商家的位置,但是由於城市道路交通的原因,他只能在左右中選擇乙個方向,在上下中選擇乙個方向,現在問他有多少種方案到達商家位址。給定乙個地圖map及它的長寬n和m,其中1代表經理位置,2代表商家位置,1代表不能經過的地區,0代表可...
一道bfs廣搜的ACM競賽入門題
農夫知道一頭牛的位置,想要抓住它。農夫和牛都於數軸上 農夫起始位於點 n 0 n 100000 牛位於點 k 0 k 100000 農夫有兩種移動方式 1 從 x移動到 x 1或x 1 每次移動花費一分鐘 2 從 x移動到 2 x 每次移動花費一分鐘 假設牛沒有意識到農夫的行動,站在原地不動。最少要...
HDU 3555 我的第一道數字DP
題意就是找0到n有多少個數中含有49。資料範圍接近10 20 dp的狀態是2維的dp len 3 dp len 0 代表長度為len不含49的方案數 dp len 1 代表長度為len不含49但是以9開頭的數字的方案數 dp len 2 代表長度為len含有49的方案數 狀態轉移如下 dp i 0 ...