輸入格式:
第一行有乙個正整數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 ...