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