NOIP2011 洛谷1312 Mayan遊戲

2021-07-24 09:00:56 字數 2616 閱讀 2135

題目描述

mayan puzzle是最近流行起來的乙個遊戲。遊戲介面是乙個 7 行5

列的棋盤,上面堆放著一些方塊,方塊不能懸空堆放,即方塊必須放在最下面一行,或者放在其他方塊之上。遊戲通關是指在規定的步數內消除所有的方塊,消除方塊的規則如下:

1 、每步移動可以且僅可以沿橫向(即向左或向右)拖動某一方塊一格:當拖動這一方塊時,如果拖動後到達的位置(以下稱目標位置)也有方塊,那麼這兩個方塊將交換位置(參見輸入輸出樣例說明中的圖6

到圖7 );如果目標位置上沒有方塊,那麼被拖動的方塊將從原來的豎列中抽出,並從目標位置上掉落(直到不懸空,參見下面圖1 和圖2);

2 、任一時刻,如果在一橫行或者豎列上有連續三個或者三個以上相同顏色的方塊,則它們將立即被消除(參見圖1 到圖3)。

注意:a) 如果同時有多組方塊滿足消除條件,幾組方塊會同時被消除(例如下面圖4 ,三個顏色為1 的方塊和三個顏色為 2

的方塊會同時被消除,最後剩下乙個顏色為 2 的方塊)。

b) 當出現行和列都滿足消除條件且行列共享某個方塊時,行和列上滿足消除條件的所有方塊會被同時消除(例如下面圖5 所示的情形,5

個方塊會同時被消除)。

3 、方塊消除之後,消除位置之上的方塊將掉落,掉落後可能會引起新的方塊消除。注意:掉落的過程中將不會有方塊的消除。

上面圖1 到圖 3 給出了在棋盤上移動一塊方塊之後棋盤的變化。棋盤的左下角方塊的座標為(0, 0 ),將位於(3, 3

)的方塊向左移動之後,遊戲介面從圖 1 變成圖 2 所示的狀態,此時在一豎列上有連續三塊顏色為4 的方塊,滿足消除條件,消除連續3

塊顏色為4 的方塊後,上方的顏色為3 的方塊掉落,形成圖 3 所示的局面。 輸入輸出格式 輸入格式:

輸入檔案mayan.in,共 6 行。

第一行為乙個正整數n ,表示要求遊戲通關的步數。

接下來的5 行,描述 7*5 的遊戲介面。每行若干個整數,每兩個整數之間用乙個空格隔開,每行以乙個0

結束,自下向上表示每豎列方塊的顏色編號(顏色不多於10種,從1 開始順序編號,相同數字表示相同顏色)。

輸入資料保證初始棋盤中沒有可以消除的方塊。

輸出格式:

輸出檔名為mayan.out。

如果有解決方案,輸出 n 行,每行包含 3 個整數x,y,g ,表示一次移動,每兩個整數之間用乙個空格隔開,其中(x

,y)表示要移動的方塊的座標,g 表示移動的方向,1 表示向右移動,-1表示向左移動。注意:多組解時,按照 x 為第一關健字,y

為第二關健字,1優先於-1 ,給出一組字典序最小的解。遊戲介面左下角的座標為(0 ,0 )。

如果沒有解決方案,輸出一行,包含乙個整數-1。

列舉移動方法,然後消除。

消除的時候可以先移動,然後把所有三個連起來的標記之後一起刪除,迴圈直到刪除不了為止。

剪枝有:如果某種顏色存在且數量少於3,直接剪掉。左邊的右移和右邊的左移是等價的,只列舉一種。只列舉兩個顏色不同的交換。

#include

#include

#include

using

namespace

std;

const

int r=5,c=7;

int a[5][7],px[10],py[10],pz[10],n,cnt[11],tot;

bool clr()

; for (i=0;ifor (j=0;jif (!a[i][j])

for (k=j+1;kif (a[i][k])

}for (i=0;ifor (j=0;jif (i<=r-3&&a[i][j]&&a[i][j]==a[i+1][j]&&a[i+1][j]==a[i+2][j])

out[i][j]=out[i+1][j]=out[i+2][j]=1,flag=1;

if (j<=c-3&&a[i][j]&&a[i][j]==a[i][j+1]&&a[i][j+1]==a[i][j+2])

out[i][j]=out[i][j+1]=out[i][j+2]=1,flag=1;

}for (i=0;ifor (j=0;jif (out[i][j])

return flag;

}bool dfs(int s)

else

while (clr());

if (dfs(s+1)) return

1; memcpy(a,t1,sizeof(a));

memcpy(cnt,t2,sizeof(t2));

tot=t3;

}return0;}

int main()

else

break;

}if (dfs(1))

for (i=1;i<=n;i++)

printf("%d %d %d\n",px[i],py[i],pz[i]);

else

printf("-1\n");

}

洛谷 1312 Mayan遊戲(dfs)

在乙個7行5列的期盤中,有至多10種顏色的方塊。當這些方塊下方空的時候,這些方塊總是會垂直掉落 當有3個顏色相同的方塊排成一行或一列時,它們會被同時消除 你需要在給定的步數內,通過調換相鄰方塊,使棋盤上沒有方塊。若做不到,輸出 1 不然輸出1種方法 要移動的方塊的x y座標 移動方向 移動方向 1 ...

NOIP2011提高組 Mayan遊戲

mayan puzzle是最近流行起來的乙個遊戲。遊戲介面是乙個 7 行5 列的棋盤,上面堆放著一些方塊,方塊不能懸空堆放,即方塊必須放在最下面一行,或者放在其他方塊之上。遊戲通關是指在規定的步數內消除所有的方塊,消除方塊的規則如下 1 每步移動可以且僅可以沿橫向 即向左或向右 拖動某一方塊一格 當...

NOIP2011提高組 Mayan遊戲

題目 洛谷p1312 vijos p1738 codevs1136。題目大意 在乙個7行5列的棋盤 左下角座標0,0 上,有一些不同顏色的棋子。規定某一時刻,連續三個橫排或豎列的棋子顏色相同,則它們被消掉 同時滿足條件的一起消掉,存在多個這樣的情況有公共棋子時,所有的都消掉 然後有一種操作 將乙個棋...