BZOJ1085 SCOI2005 騎士精神

2022-05-19 20:44:53 字數 862 閱讀 6377

有乙個5*5的棋盤,棋盤上有12個白棋子,12個黑棋子,和乙個空格,每只棋子只能按照馬走日的規則移動,求出最少步數達到以下狀態

dfs+a*

dfs很容易做,不過時間複雜度太高

所以用a*來優化時間

a*的好處預判當前遞迴到結束得到的值,從而判斷是否進入遞迴,部分判斷,避免遍歷太多無用點

#include#include

#include

#include

using

namespace

std;

int a[6][6

];const

int dx[9]=;

const

int dy[9]=;

bool

bk;int ans[6][6]=,,,

,,};bool

pd()

intw;

bool pda(int

k) }

}return

true;}

void dfs(int x,int y,int

k)

else

}}int

main()

else a[i][j]=st[j]-'0'

; }

}bk=false

;

for(w=1;w<=15;w++)

}if(bk==false) printf("

-1\n");

}return0;

}

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的格仔 移動到空 位上。給定乙個初始的棋盤,怎樣才能經過移動變成如下目標棋盤 為了體現出騎士精神,他們必須以最...