洛谷P2324 SCOI2005 騎士精神

2022-08-05 08:03:19 字數 1665 閱讀 6714

輸入格式:

第一行有乙個正整數t(t<=10),表示一共有n組資料。接下來有t個5×5的矩陣,0表示白色騎士,1表示黑色騎士,*表示空位。兩組資料之間沒有空行。

輸出格式:

對於每組資料都輸出一行。如果能在15步以內(包括15步)到達目標狀態,則輸出步數,否則輸出-1。

輸入樣例#1:

2

10110

01*11

10111

01001

00000

01011

110*1

01110

01010

00100

輸出樣例#1:7-1

分析:

這道題用到了迭代加深搜尋

或者準確的說是ida*

但如果這道題用迭代加深+常數優化的話

會跑的更快一些(好吧是因為我不會ida*

很顯然,如果列舉騎士分布,狀態巨多,且不好判斷空格在哪,所以換個思路,不移騎士,移空格

迭代加深就是每次限制搜尋深度,十分廣搜

但是,仔細想想,只有四種情況:

1.原來騎士歸位了,改完沒歸位

2.原來騎士沒歸位,改完歸位了

3.原來空位沒歸位,改完歸位了

4.原來空位歸位了,改完沒歸位

1 #include 2 #include 3

#define f(i, a, b) for (i = a; i <= b; ++i)

4using

namespace

std;

5int a[6][6];6

int b[6][6] =,

7 ,

8 ,

9 ,

10 ,

11 };

12int dx[8] = ;

13int dy[8] = ;

14int

mxd;

15 inline int

read()

25int check(int k, int x, int y, int sum, int

la)45}46

}47return0;

48}49int

main()

62else a[i][j] = k - '0'

;63if (a[i][j] != b[i][j]) mn++;64}

65bool fl = 0

;66 f(i, mn, 16)71

}72if (!fl)

73 printf("

-1\n");

74 t--;75}

76return0;

77 }

洛谷 P2324 SCOI2005 騎士精神

ida 練習題 1 ida iddfs a 1.1 iddfs用於單層 無限 情況但是解層數很少,這時可以限制dfs層數,id為每次的層數限制 1.2 a 具有估價函式,用於bfs快速求解 ida 就是將估價函式用於層數限制的dfs中,如果具有層數的dfs仍然無法滿足時間限制,那麼可以考慮題目性質進...

P2324 SCOI2005 騎士精神

ida 演算法 12個白騎士和12個黑騎士在乙個5 5的棋盤上走來走去,求最後走成目標局面的最小步數。看不懂請走傳送門 ida 就是帶有迭代加深和估價函式優化的搜尋。估價函式 對未來搜尋深度的最優估計 通常是達不到的 對於估價函式g,要求g 現實步數 越接近越好,因為越接近能剪的枝就越多 當當前步數...

P2324 SCOI2005 騎士精神

輸入格式 第一行有乙個正整數t t 10 表示一共有n組資料。接下來有t個5 5的矩陣,0表示白色騎士,1表示黑色騎士,表示空位。兩組資料之間沒有空行。輸出格式 對於每組資料都輸出一行。如果能在15步以內 包括15步 到達目標狀態,則輸出步數,否則輸出 1。輸入樣例 1 複製 2 10110 01 ...