题目描述

在4x4的棋盘上摆满了黑白棋子,黑白两色的位置和数目随机其中左上角坐标为(1,1),右下角坐标为(4,4),现在依次有一些翻转操作,要对一些给定支点坐标为中心的上下左右四个棋子的颜色进行翻转,请计算出翻转后的棋盘颜色。

给定两个数组Af,分别为初始棋盘和翻转位置。其中翻转位置共有3个。请返回翻转后的棋盘。

测试样例:
[[0,0,1,1],[1,0,1,0],[0,1,1,0],[0,0,1,0]],[[2,2],[3,3],[4,4]]
返回:[[0,1,1,1],[0,0,1,0],[0,1,1,0],[0,0,1,0]]
 1 #include<iostream>
 2 #include<vector>
 3 using namespace std;
 4 class Flip {
 5 public:
 6     vector<vector<int> > flipChess(vector<vector<int> > A, vector<vector<int> > f) {
 7         // write code here
 8         int r=A.size();    //计算行数
 9         int c=A[0].size(); //计算列数
10         int r1 = f.size();    //计算行数
11         int c1 = f[0].size(); //计算列数
12         cout << r1 << endl;
13         for (int i = 0; i < r1; i++)
14         {
15             int row = f[i][0];
16             int col = f[i][1];
17             cout << row << " " << col << endl;
18             if (row - 1 >= 1)
19             {
20                 A[row - 1 - 1][col - 1] = abs(A[row - 1 - 1][col - 1] - 1);
21             }
22             if (row + 1 <= r )
23             {
24                 A[row + 1 - 1][col - 1] = abs(A[row + 1 - 1][col - 1] - 1);
25             }
26             if (col - 1 >= 1)
27             {
28                 A[row - 1][col - 1 - 1] = abs(A[row - 1][col - 1 - 1] - 1);
29             }
30             if (col+1<=c)
31             {
32                 A[row - 1][col + 1 - 1] = abs(A[row - 1][col + 1 - 1] - 1);
33             }
34         }
35         return A;
36     }
37 };
38 int main()
39 {
40     vector<vector<int>> A{ { 0, 0, 1, 1 }, { 1, 0, 1, 0 }, { 0, 1, 1, 0 }, { 0, 0, 1, 0 } };
41     vector<vector<int>> f{ { 2,2}, {3,3 }, {4,4 }};
42     Flip F;
43     vector<vector<int>> b = F.flipChess(A, f);
44     for (int i = 0; i < 4; i++)
45     {
46         for (int j = 0; j < 4; j++)
47         {
48             cout << b[i][j] << " ";
49         }
50         cout << endl;
51     }
52     system("pause");
53     return 0;
54 }

 

posted on 2017-08-31 10:16  无惧风云  阅读(374)  评论(0编辑  收藏  举报