問題描述
給定乙個矩陣, 判斷移動哪乙個格仔,可以實現消除。(定義連續三個即可消除)
據說是華為的筆試題。
分析先寫乙個函式,判斷包含(i, j)的格仔是否可能實現消除。
然後就是向右向下交換,然後呼叫上面寫好的函式判斷
被交換的兩個格仔是否實現消除。
重點是:
1、只需要向右向下交換,因為遍歷的時候,後面的交換會重複。前乙個判斷了向右交換是否消除,後乙個遍歷就不需要再判斷向左交換是否重複了。
2、一定要對被交換的兩個格仔都判斷是否能消除,才能實現全面的判斷。
**// main.cpp
// huawei
// created by stevewong on 11/10/2016.
#include
#include
#include
#include
//#include
using namespace std;
const int len = 8;
void pmap(int map[len])
for (int i = 0; i < len; ++i)
for (int j = 0; j < len; ++j)
cout << map[i][j] << " ";
cout << endl;
// 檢查以(i,j)為中心的點, 看是否可以消除
bool check(int map[len], int i, int j)// 保證i、j不越界,
if (
(i-1>=0 && i+1
|| (j-1>=0 && j+1
|| (i-2>=0 && map[i-2][j]==map[i-1][j]&&map[i-1][j]==map[i][j])
|| (j-2>=0 && map[i][j-2]==map[i][j-1]&&map[i][j-1]==map[i][j])
|| (i+2
|| (j+2
return true;
return false;
bool swapandjudge(int m[len], int i, int j)// 保證i、j不越界, 應該對被swap的兩個點都做縱向和橫向的檢查
int map[len][len];
for (int ii = 0; ii < len; ++ii)
for (int jj = 0; jj < len; ++jj)
map[ii][jj] = m[ii][jj];
// 原來就可以消除
if (check(map, i, j))
printf("no need to swap at (%d, %d)\n", i, j);
return true;
// 只需要向下換和向右換
// 向下換
if (i + 1 < len)
swap(map[i+1][j], map[i][j]);
if (check(map, i, j))
printf("# swap and sweap! (%d, %d)\n", i, j);
return true;
if (check(map, i+1, j))
printf("# swap and sweap! (%d, %d)\n", i+1, j);
return true;
swap(map[i+1][j], map[i][j]);// 換回來
// 向右換
if (j + 1 < len)
swap(map[i][j+1], map[i][j]);
if (check(map, i, j))
printf("# swap and sweap! (%d, %d)\n", i, j);
return true;
if (check(map, i, j+1))
printf("# swap and sweap! (%d, %d)\n", i, j+1);
return true;
swap(map[i][j+1], map[i][j]);// 換回來
return false;
void findminswap(int map[len])
for (int i = 0; i < len; ++i)
for (int j = 0; j < len; ++j)
if (swapandjudge(map, i, j))
printf("gotcha! (%d, %d)\n", i, j);
int main(int argc, const char * ar**) {
// insert code here...
// std::cout << "hello, world!\n";
srand(unsigned(time(0)));
for (int i = 0; i < len; ++i)
for (int j = 0; j < len; ++j)
map[i][j] = rand() % 5;
cout << "xiaoxiaole!\n";
findminswap(map);
pmap(map);
return 0;
您可能感興趣的文章:
C語言實現消消樂
消除類遊戲是深受大眾歡迎的一種遊戲,遊戲在乙個包含有n行m列的遊戲棋盤上進行,棋盤的每一行每一列的方格上放著乙個有顏色的棋子,當一行或一列上有連續三個或更多的相同顏色的棋子時,這些棋子都被消除。當有多處可以被消除時,這些地方的棋子將同時被消除。現在給你乙個n行m列的棋盤,棋盤中的每乙個方格上有乙個棋...
python作業5 消消樂
相鄰的組合兩兩相消去,最後是否能消完 str defsearch a,lst 尋找元素是否在列表中,並返回index for i in range len lst if lst i a return i else return false defcheck str 判斷是否可消完 open brac...
用PHP實現開心消消樂演算法
一 需求描述 1 在乙個8 8的矩陣方格中隨機出現5種顏色的色塊。2 當有三個或以上色塊在橫向或縱向上相連,則消除這些色塊。3 色塊消除後,上方色塊往下平移,並掉下顏色隨機的色塊填充矩陣空缺。4 重複2 3步驟。5 消除3個相同色塊加10分,4個加15分,5個加20分,6個加30分,7個加40分,8...