BFS 剪枝 hdoj1195(不錯)

2021-06-17 18:26:11 字數 644 閱讀 2101

感覺這道題還不錯,可能是因為自己做的不好的原因。

題意:給你兩個密碼,乙個袁輝密碼,乙個正確密碼,問最少經過幾步可以變為正確密碼,每次可以+1,-1,或者相鄰的交換。

思路:只要每次把變化的數壓入佇列中就行。但要注意剪枝,剛開始,忘了對每個出現過的數做標記,導致記憶體超限,做的也很麻煩,搞得自己很被動;剛開始還犯了個很大的錯誤,就是對每位上的數連續加完之後,在處理下一位,這樣是大錯特錯,因為求的是最少的步驟,以後在這種題上要注意!

#include#include#include#includeusing namespace std;

struct node

;node first,last;

bool visit[10][10][10][10],flag;

void bfs()

; if(flag)

for(i=0;i<4;i++)//+1

}for(i=0;i<4;i++)//-1

}for(i=0;i<3;i++)//相鄰交換}}

}int main()

bfs();

}return 0;

}

HDOJ 4277 USACO ORZ 搜尋 剪枝

hdoj 4277 usaco orz 搜尋 剪枝 題意 將n跟木棒分成3堆,3堆木棒的總和分別為a,b,c,滿足能以a,b,c組成三角形,問有多少種不同的情況 思路 暴搜 剪枝 先固定一根木棒在某一堆 include include include includeusing namespace s...

操作整數 bfs的優化剪枝

現在有兩種操作 將乙個整數 2或者將乙個整數 1 給你兩個整數a,b 請用以上兩種操作把a轉換成b,要求使用次數盡量少,輸出最少操作次數 輸入包含多組測試資料,對於每組測試資料 輸入包含一行 第一行 兩個整數a,b 最少操作次數 4 610 129 對於第乙個4 3 6 兩步 對於第二個10 9 8...

HDOJ 1010迷宮 dfs 奇偶剪枝

奇偶剪枝 把矩陣標記成如下形式 0,1,0,1,0 1,0,1,0,1 0,1,0,1,0 1,0,1,0,1 很明顯,如果起點在0 而終點在1 那顯然 要經過奇數步才能從起點走到終點,依次類推,奇偶相同的偶數步,奇偶不同的奇數步。在讀入資料的時候就可以判斷,並且做剪枝,當然做的時候並不要求把整個矩...