題意:
冰壺可以上下左右運動(前提上下左右的第乙個位置為空)。碰到冰塊則停止,冰塊也將被破壞。問懂多少次能達到終點。
乙個方向搜到底:
**:#include #include using namespace std;
int map[30][30];
int w,h;
int minn=300000;
void dfs(int x,int y,int sum,int a,int b) //a,b記錄下一次運動的方向。
if(map[x+a][y+b]==0||map[x+a][y+b]==3)//如果下一次為空,接著運動。
dfs(x+a,y+b,sum,a,b);
else if(map[x+a][y+b]==1) //否則,停止,換方向。 }
int main()
}if(map[x+1][y]!=1) //判斷能否運動。
dfs(x,y,1,1,0);
if(map[x-1][y]!=1)
dfs(x,y,1,-1,0);
if(map[x][y+1]!=1)
dfs(x,y,1,0,1);
if(map[x][y-1]!=1)
dfs(x,y,1,0,-1);
if(minn<=10)
cout<
POJ 3009 簡單的dfs回溯遍歷搜尋)
注意行 與 列 的輸入時反過來的 然後就是障礙物被撞後會消失 但當回來時要恢復被撞的障礙物。只用了乙個簡單的剪枝 當區域性最優值大於當前最優值則剪枝 include include include include include include include include include inc...
poj 3009 深搜求最短路
題目大意就是求在特定規則下的最短路,這個規則包含了消除障礙的操作。用bfs感覺選擇消除障礙的時候不同路徑會有影響,用dfs比較方便狀態的還原 雖然效率比較低 因此這道題目採用dfs來寫。寫的第一次提交 是tle,原因是忘記總步數 10就應該剪枝的條件。ac 如下 1 include 2 includ...
OneBug 冰壺比賽(DFS)
題目 poj 3009 curling 2.0 題意 m n矩陣中,給出起點 終點 空格 障礙,從每個點可向4方前進,直到遇到障礙,打碎並停在障礙格的前面。求到達終點的最少前進次數。型別 dfs 記憶化搜尋 演算法 從某點出發,向4個方向投擲,遇到障礙格,標記其為空格狀態,繼續遞迴障礙前一點,回退恢...