#include <iostream>
using namespace std; #define ROW 12
#define COL 10 class Star
{
public:
enum Stat_star
{
willRemoved = -2,
hasRemoved,
normal
}; Star()
{
for (unsigned i = 0; i < ROW; i++)
{
for (unsigned j = 0; j < COL; j++)
{
m_arr[i][j].state = normal;
m_arr[i][j].visited = false;
}
}
}
~Star(){} void print()
{
cout << "=====================" << endl;
for (unsigned i = 0; i < ROW; i++)
{
for (unsigned j = 0; j < COL; j++)
{cout << m_arr[i][j].data << "(" << m_arr[i][j].state << ")" << "\t";}
cout << endl;
}
} void resetVisited()
{
for (unsigned i = 0; i < ROW; i++)
{
for (unsigned j = 0; j < COL; j++)
{
if(m_arr[i][j].state != hasRemoved)
{m_arr[i][j].visited = false;}
}
}
} //检測是否游戏结束
bool checkGameOver()
{
for (unsigned i = 0; i < ROW; i++)
{
for (unsigned j = 0; j < COL; j++)
{
if(findWillRemove(i, j) > 1)
{return false;}
}
} return true;
} //检測是否要整列移动
void checkColMove()
{
int dt = 0; //列的增量
for (int i = 0; i < COL - dt; i++)
{
bool allRemoved = true;
//检測某列是否整列为空
for (int j = 0; j < ROW; j++)
{
if(m_arr[j][i].state != hasRemoved)
{
allRemoved = false;
break;
}
} //開始移动列
if(allRemoved)
{
for (int x = i; x < COL; x++)
{
for (int y = 0; y < ROW; y++)
{
if(x + 1 < COL)
{
Star_data tempStar = m_arr[y][x];
m_arr[y][x] = m_arr[y][x + 1];
}
}
}
//最后一列置空
for (int y = 0; y < ROW; y++)
{m_arr[y][COL - 1].state = hasRemoved;}
i--;
dt++;
}
}
} //找到同样的球后。删除同样的球
void removeSameStar()
{
//以列来找
for (int j = 0; j < COL; j++)
{
for (int i = ROW - 1; i >= 0; i--)
{
if(m_arr[i][j].state == willRemoved)
{
Star_data tempStar = m_arr[i][j];
//依次把星星下移。而且把空的星星放到最上面
for (int x = i; x >= 0; x--)
{
if(x - 1 >= 0)
{m_arr[x][j] = m_arr[x - 1][j];}
}
m_arr[0][j] = tempStar;
m_arr[0][j].state = hasRemoved;
i++;
}
}
}
}
//点击某个星星。找到将要被移除的星星
int findWillRemove(int i, int j)
{
int findCount = 0;
findWillRemove(i, j, findCount);
resetVisited();
return findCount;
}
//查找将要被移除的
void findWillRemove(int i, int j, int &findCount)
{
if(i >= ROW || i < 0 || j >= COL || j < 0 || m_arr[i][j].state == hasRemoved || m_arr[i][j].visited)
{return;} m_arr[i][j].visited = true;
findCount++; //左
if(i - 1 >= 0 && m_arr[i - 1][j].state != hasRemoved && m_arr[i - 1][j].data == m_arr[i][j].data)
{
m_arr[i][j].state = willRemoved;
m_arr[i - 1][j].state = willRemoved;
findWillRemove(i - 1, j, findCount);
}
//右
if(i + 1 < ROW && m_arr[i + 1][j].state != hasRemoved && m_arr[i + 1][j].data == m_arr[i][j].data)
{
m_arr[i][j].state = willRemoved;
m_arr[i + 1][j].state = willRemoved;
findWillRemove(i + 1, j, findCount);
}
//上
if(j + 1 < COL && m_arr[i][j + 1].state != hasRemoved && m_arr[i][j + 1].data == m_arr[i][j].data)
{
m_arr[i][j].state = willRemoved;
m_arr[i][j + 1].state = willRemoved;
findWillRemove(i, j + 1, findCount);
}
//下
if(j - 1 >= 0 && m_arr[i][j - 1].state != hasRemoved && m_arr[i][j - 1].data == m_arr[i][j].data)
{
m_arr[i][j].state = willRemoved;
m_arr[i][j - 1].state = willRemoved;
findWillRemove(i, j - 1, findCount);
}
} struct Star_data
{
int data; //数据
Stat_star state; //状态
bool visited; //是否訪问
};
Star_data m_arr[ROW][COL];
}; int main()
{
Star star;
int arr[ROW][COL] =
{
2, 1, 3, 2, 1, 2, 1, 3, 2, 1,
2, 2, 5, 1, 2 ,2, 2, 5, 1, 2,
3, 2, 1, 3, 3, 3, 2, 1, 3, 3,
2, 5, 4, 1, 4, 2, 5, 4, 1, 4,
2, 2, 3, 2, 5, 2, 2, 3, 2, 5,
2, 1, 3, 2, 1, 2, 1, 3, 2, 1,
2, 2, 5, 1, 2 ,2, 2, 5, 1, 2,
3, 2, 1, 3, 3, 3, 2, 1, 3, 3,
2, 5, 4, 1, 4, 2, 5, 4, 1, 4,
2, 2, 3, 2, 5, 2, 2, 3, 2, 5,
2, 5, 4, 1, 4, 2, 5, 4, 1, 4,
2, 2, 3, 2, 5, 2, 2, 3, 2, 5
}; for (unsigned i = 0; i < ROW; i++)
{
for (unsigned j = 0; j < COL; j++)
{star.m_arr[i][j].data = arr[i][j];}
} star.print(); star.findWillRemove(0, 0); star.removeSameStar(); star.checkColMove();
star.print(); star.checkGameOver() ? cout <<"over" : cout <<"not over";
system("pause");
return 0;
}

消灭星星的数组高效率算法(c++代码,控制台程序)的更多相关文章

  1. 在Eclipse中使用Junit进行单元测试练习 实现最大子数组和算法

    1.如何在MAC OS X下安装配置java开发工具 http://www.cnblogs.com/coderL/p/5939541.html 2.最大子数组和算法 附上程序运行及测试截图,源码见后 ...

  2. Python实现各种排序算法的代码示例总结

    Python实现各种排序算法的代码示例总结 作者:Donald Knuth 字体:[增加 减小] 类型:转载 时间:2015-12-11我要评论 这篇文章主要介绍了Python实现各种排序算法的代码示 ...

  3. 10个经典的C语言面试基础算法及代码

    10个经典的C语言面试基础算法及代码作者:码农网 – 小峰 原文地址:http://www.codeceo.com/article/10-c-interview-algorithm.html 算法是一 ...

  4. 经典面试题(二)附答案 算法+数据结构+代码 微软Microsoft、谷歌Google、百度、腾讯

    1.正整数序列Q中的每个元素都至少能被正整数a和b中的一个整除,现给定a和b,需要计算出Q中的前几项, 例如,当a=3,b=5,N=6时,序列为3,5,6,9,10,12 (1).设计一个函数void ...

  5. javascript数组去重算法-----3

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  6. Cocos2d-x 3.4 之 消灭星星 &gt; 第三篇(终) &lt;

    ***************************************转载请注明出处:http://blog.csdn.net/lttree************************** ...

  7. php实现构建乘积数组(算法:替换)(语法错误:分号和$符号)

    php实现构建乘积数组(算法:替换)(语法错误:分号和$符号) 一.总结 1.算法:替换 2.语法错误:分号和$符号 二.php实现构建乘积数组 题目描述: 给定一个数组A[0,1,...,n-1], ...

  8. 排序算法Java代码实现(一)—— 选择排序

    以下几篇随笔都是记录的我实现八大排序的代码,主要是贴出代码吧,讲解什么的都没有,主要是为了方便我自己复习,哈哈,如果看不明白,也不要说我坑哦! 本片分为两部分代码: 常用方法封装 排序算法里需要频繁使 ...

  9. 【转】Algorithms -离散概率值(discrete)和重置、洗牌(shuffle)算法及代码

    离散概率值(discrete) 和 重置\洗牌(shuffle) 算法 及 代码 本文地址: http://blog.csdn.net/caroline_wendy/article/details/1 ...

随机推荐

  1. bzoj1296: [SCOI2009]粉刷匠(DP)

    1296: [SCOI2009]粉刷匠 题目:传送门 题解: DP新姿势:dp套dp 我们先单独处理每个串,然后再放到全局更新: f[i][k]表示当前串枚举到第i个位置,用了k次机会 F[i][j] ...

  2. thinkphp5项目--个人博客(二)

    thinkphp5项目--个人博客(二) 项目地址 fry404006308/personalBlog: personalBloghttps://github.com/fry404006308/per ...

  3. word 的使用 —— 分页符与分节符

    节的概念:节定义了一些格式, 如页边距.页面的方向.页眉和页脚,以及页码的顺序. 分节符是指为表示节的结尾插入的标记. 分节符的作用: 分节符起着分隔其前后文本格式的作用,如果删除了某个分节符,它前面 ...

  4. 解读邮箱正则表达式:^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$

    转自:http://www.cnblogs.com/joyceTING/archive/2013/05/09/3069089.html正则表达式 \w+([-+.]\w+)*@\w+([-.]\w+) ...

  5. E. Reachability from the Capital(tarjan+dfs)

    求联通分量个数,在dfs一次 #include <iostream> #include <algorithm> #include <cstring> #includ ...

  6. Linux下安装使用MySQL

    网上找那些安装教程比较多的版本,版本只要不是太旧就行. 下载mysql 5.6.28 通用版64位二进制版,二进制版相当于windows的安装包,可以直接安装,如果是源码版,还需要编译后再进行安装. ...

  7. php基础:define()定义常数函数

    define(); 常量类似变量,不同之处在于: 在设定以后,常量的值无法更改 常量名不需要开头的美元符号 ($) 作用域不影响对常量的访问 常量值只能是字符串或数字 <?php define( ...

  8. SSD-tensorflow-1 demo

    一.简易识别 用最简单的已训练好的模型对20类目标做检测. 你电脑的tensorflow + CUDA + CUDNN环境都是OK的, 同时python需要安装cv2库 {      'aeropla ...

  9. 137 - ZOJ Monthly, November 2014 - J Poker Face

    Poker Face Time Limit: 2 Seconds      Memory Limit: 65536 KB As is known to all, coders are lack of ...

  10. [Python] Read and plot data from csv file

    Install: pip install pandas pip install matplotlib # check out the doc from site import pandas as pd ...