bzoj 1085: [SCOI2005]騎士精神

**

Description

**

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


**

Input

**

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


**

Output

**

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


**

Sample Input

**

2

10110

01*11

10111

01001

00000

01011

110*1

01110

01010

00100


**

Sample Output

**

7

-1


**

HINT

**


**

Source

**


**

Solution

**
一個水題調了一下午簡直了也是…

於是做個簽到題愉悅一下身心QAQ

這道題其實只要第一個格子確定了之後 答案就確定了QAQ

所以答案輸入一個隨機數再用3 取餘一下就能拿到不少分了= =

不過程序比隨機長不了幾行QAQ


**

Code

**

#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;

const int maxn=10010;
int a[maxn],n,ans;
bool dfs(int x,int k,int cut)
{
    if(x==n&&a[x]-k-cut==0)return 1;
    else if(x==n)return 0;
    else if(a[x]-k-cut<0)return 0;
    else return dfs(x+1,a[x]-k-cut,k);
}
int main()
{
    scanf("%d",&n);
    for(int i=1;i<=n;i++)scanf("%d",&a[i]);
    ans=dfs(1,0,0)+dfs(1,1,0);
    printf("%d",ans);
    return 0;
}


竹杖芒鞋輕勝馬 2333333[請自行腦補節奏= =]

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章