/**
* by:gonzhihui
* 2017.11.30
*
* 一个小游戏 10*10矩阵 相邻两个或多个消成0
* (内置外挂)一键秒杀 :input x: 100
*
* 主要数据结构:
* typedef std::vector<std::pair<int, int> > VectorPair
* vector中存放一次输入后的check后的下标。
*
* 编译 直接 g++ -o 可执行文件名 源文件名.cpp
*
*/
using std::make_pair
typedef std::vector<std::pair<int, int> > VectorPair
VectorPair vp
static int c[10][10]
//输出矩阵
void show()
//初始化矩阵
void initMatrix()
//核心算法
bool check(int i, int j)
bool checkTop(int i, int j)
bool checkBottom(int i, int j)
bool checkLeft(int i, int j)
bool checkRight(int i, int j)
//将vector中下标处的数组值清零。
bool change0(int i, int j, VectorPair &vp)
//一键秒杀(内置外挂)
void secKill(VectorPair &vp)
void show()
{
std::cout<< " 0 1 2 3 4 5 6 7 8 9" <<std::endl
std::cout<< ""<<std::endl
for(int i = 0
{
printf("%d %d %d %d %d %d %d %d %d %d %d\n", i,
c[i][0], c[i][1], c[i][2], c[i][3], c[i][4], c[i][5],
c[i][6], c[i][7], c[i][8], c[i][9])
}
}
bool checkTop(int i, int j)
{
if(i-1 >= 0 && c[i-1][j] == c[i][j])
{
auto pr = make_pair(i-1, j)
vp.push_back(pr)
return true
}
return false
}
bool checkBottom(int i, int j)
{
if(i+1 <= 9 && c[i+1][j] == c[i][j])
{
auto pr = make_pair(i+1, j)
vp.push_back(pr)
return true
}
return false
}
bool checkLeft(int i, int j)
{
//左
if(j-1 >= 0 && c[i][j-1] == c[i][j])
{
auto pr = make_pair(i, j-1)
vp.push_back(pr)
return true
}
return false
}
bool checkRight(int i, int j)
{
//右
if(j+1 <= 9 && c[i][j+1] == c[i][j])
{
auto pr = make_pair(i, j+1)
vp.push_back(pr)
return true
}
return false
}
bool check(int i, int j)
{
bool ret = false
//这么多变量 是为了防止每个while互相影响
//当然有其他写法 就是在每个while里创建临时
//变量,代码同样没有减少多少,暂时想到这么多
int i1,i2,i3,i4,j1,j2,j3,j4
i1 = i2 = i3 = i4 = i
j1 = j2 = j3 = j4 = j
while(checkTop(i1, j1))
{
i1--
ret = true
}
while(checkBottom(i2, j2))
{
i2++
ret = true
}
while(checkLeft(i3, j3))
{
j3--
ret = true
}
while(checkRight(i4, j4))
{
j4++
ret = true
}
return ret
}
void initMatrix()
{
memset(c, 0, sizeof(int) * 10 * 10)
srand(time(0))
for(int i = 0
{
for(int j = 0
{
int num = rand() % 5 + 1
c[i][j] = num
}
}
}
bool change0(int i, int j, VectorPair &vp)
{
if(vp.size() ==0)
return false
c[i][j] = 0
for(auto i : vp)
{
c[i.first][i.second] = 0
}
//清除vp
VectorPair().swap(vp)
return true
}
void secKill(VectorPair &vp)
{
for(int i = 0
{
for(int j = 0
{
check(i, j)
change0(i, j, vp)
}
}
show()
std::cout<< "秒杀成功(^_^)" <<std::endl
}
int main()
{
initMatrix()
show()
while(true)
{
int i, j
std::cout<<"input x:"
std::cin>>i
if(i == -1) break
if(i == 100)
{
secKill(vp)
break
}
std::cout<<"input y:"
std::cin>>j
if(j == -1) break
if(j == 100)
{
secKill(vp)
break
}
check(i, j)
change0(i, j, vp)
show()
}
return 0
}