//
// main.cpp
// huawei
//
// Created by SteveWong on
11
/
10
/
2016
.
// Copyright ?
2016
SteveWong. All rights reserved.
//
#include <iostream>
#include <string>
#include <vector>
#include <ctime>
//#include <cstdlib>
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
<LEN && map[i
-1
][j]==map[i][j]&&map[i][j]==map[i+
1
][j])
|| (j
-1
>=
0
&& j+
1
<LEN && map[i][j
-1
]==map[i][j]&&map[i][j]==map[i][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
<LEN && map[i+
2
][j]==map[i+
1
][j]&&map[i+
1
][j]==map[i][j])
|| (j+
2
<LEN && map[i][j+
2
]==map[i][j+
1
]&&map[i][j+
1
]==map[i][j])
)
{
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 * argv[]) {
// 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
;
}