mayan 遊戲真是毒瘤

2022-04-30 02:06:11 字數 870 閱讀 8257

先是改變時沒有fall。40分

然後是fall函式寫慢了 tle 50分

上**#include#include#includeusing namespace std;

struct node

if(i-1&&m[i-1][j]==m[i][j]&&m[i][j]==m[i+1][j]&&m[i-1][j]==m[i+1][j])

}return ca;

}void fall()

for(int j=1;j<=top;j++)

m[i][j]=pass[j];//再安回去

} }

void clear()

fall();//掉落

}bool judge1()

bool judge2()

};node a;

int n;

bool found;

int stack[5555][3];

void dfs(int step)

node b=a;

for(int i=1;i<=5;i++)

for(int j=1;j<=7;j++)

if(found)

return;

if(!a.m[i-1][j]&&a.m[i][j]&&i-1!=0)

} }int main()

}while(a.can())

a.clear();

dfs(0);

if(found)

{for(int i=0;i對於這道題

難點我覺得不是思維的難度

而是碼力。真的時純靠碼力

以及演算法的優化

fall函式我一開始就寫了個n^2演算法

華麗麗的tle

NOIP2011 Mayan遊戲 搜尋

第一反應是搜尋題,想了一下如果用bfs的話,由於狀態過多,可能超記憶體,因此我用的dfs。這裡我們討論一下剪枝條件 如果當前狀態有一種顏色的數量小於3,那麼這種顏色就無法被消除,因此我們可以提前退出迭代。如果兩個連著的方塊顏色是相同的話,我們不用交換。如果兩個非空的方塊交換,我們只用考慮左邊那個方塊...

NOIP2011 Mayan遊戲 題解

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

NOIP2011 Mayan遊戲 搜尋

乙個有效的剪枝是排除等效冗沉,當兩種操作形成等效效果時不重複搜尋 若有兩個塊,那麼左邊的右移和右邊的左移是等效的,由於題意認為右移優先於左移,所以這種情況只取右移,而乙個塊左邊是空的時候則要嘗試左移 在回溯法 還原 的時候,可以先複製出來局面,在函式裡開陣列 別用全域性的,要儲存多個局面 然後複製回...