SCOI2005 BZOJ1085 騎士精神

2022-08-03 14:21:26 字數 1295 閱讀 4528

time limit: 10 sec  memory limit: 162 mb

submit: 1112  solved: 604

[submit][status][discuss]

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

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

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

210110

01*11

10111

01001

00000

01011

110*1

01110

01010

001007-1

第一次寫ida*……算是通過這個題目初步了解了一下a*與迭代加深的思想吧,不過感覺這個題中所謂的ida*不過是迭代加深加了個小剪枝罷了……也沒有啥估價函式。

#include#include

#include

#include

#include

using

namespace

std;

int t,k,a[6][6

];bool

flag;

char

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

,,

};int dx[8]=;

int dy[8]=;

int pd(int d,int

k)

return1;

}int

judge()

void astar(int d,int x,int

y)

if (flag) return

;

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

}int

main()

a[i][j]=c-'0'

; }

}flag=0

;

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

}if (!flag) 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...

bzoj1086 scoi2005 王室聯邦

題目鏈結 本來是來學樹上分塊的,沒想到正解是貪心 dfs。題意 求將樹分為幾個聯通塊,每個聯通塊大小大於b小於3b,是否可行。solution1 題都沒看就翻了題解。發現時貪心 dfs。一遍dfs即可。注意到以x為根節點時,其兒子s,則子樹s中與s相連的節點的連通塊,如果要構成乙個省,既可以s作為省...

bzoj1085 SCOI2005 騎士精神

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