BZOJ1085 SCOI2005 騎士精神

2022-06-01 03:15:09 字數 740 閱讀 7557

什麼啟發式搜尋什麼的看了一堆概念也沒明白,其實就是深度優先搜尋加剪枝嗎,說多辣麼神 ̄へ ̄;

1,要想知道最小步數,就得dfs列舉,但普通的dfs去漫無目的搜程式肯定會超時;

2,明確乙個剪枝策略,如果棋盤上有兩個位置不符合條件至少需要一步,推廣為當前棋盤上有n個位置不符合題意,

則至少需要n-1步,如果當期走的步數加上至少要走的步數大於了限制,那麼這條路徑一定不可行;

下面在**中來進行分析:

#include#include#includeusing namespace std;

int ans; //最終答案

char map[5][5];

char lin[5][6]=;// 用於對比的棋盤

int x[8]=;

int y[8]=; //x,y陣列用於for迴圈中模擬騎士的走位

int check()

}return 1;

}int found(int step)

}return step;

}void dfs(int step)

for(int q=0;q<8;q++)

}int main()

dfs(1);

cout<

BZOJ 1085 SCOI 2005 騎士精神

之前聽說過ida 好像很優越啊。估價函式為不在目標位置的棋子個數。列舉一遍最大搜尋深度即可。還得好好斟酌一下要列舉的搜尋深度。344ms。include include using namespace std define rep i,j,k for int i j imaxdep return 0...

bzoj1085 SCOI2005 騎士精神

此題用到了a 演算法以及迭代加深搜尋。其實做本題之前看到過這個東西,發現估價什麼的好複雜,一直不會用。但應用於本題很容易就能實現,只要和最終結果一一比對即可。演算法如下,借鑑了hzwer大神的寫法。include include using namespace std int ans 5 5 int...

BZOJ1085 SCOI2005 騎士精神

在乙個5 5的棋盤上有12個白色的騎士和12個黑色的騎士,且有乙個空位。在任何時候乙個騎士都能按照騎 士的走法 它可以走到和它橫座標相差為1,縱座標相差為2或者橫座標相差為2,縱座標相差為1的格仔 移動到空 位上。給定乙個初始的棋盤,怎樣才能經過移動變成如下目標棋盤 為了體現出騎士精神,他們必須以最...