棋子翻转

题目描述

在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 }
时间: 2024-10-10 09:50:14

棋子翻转的相关文章

POJ 1753 Flip Game (状压+暴力)

题目链接:http://poj.org/problem?id=1753 题意: 给你一个4*4的棋盘,上面有两种颜色的棋子(一种黑色,一种白色),你一次可以选择一个棋子翻转它(黑色变成白色,同理反之),选择的这枚棋子的上下左右都会被翻动(前提是上下左右都可以被翻动).问最少可以翻动多少颗棋子,让整个棋盘变成全部黑色或者全部白色. 题解: 4*4一共就16个格子,每个格子都可以是翻或者不翻,那么就是216翻法. 所以就可以用状态压缩的方法来解决. 比如说47. 47的二进制是00101111,我们

POJ - 1753 Flip Game (IDA*)

题意:4*4的棋盘摆满棋子,有黑有白,翻转一个棋子的同时也将翻转其上下左右的棋子(翻转后黑变白,白变黑),问使棋盘上所有棋子颜色相同,最少翻转的棋子数. 分析: 1.每个棋子至多翻转1次.翻转偶数次与不翻转结果相同,翻转奇数次与翻转1次结果相同. 2.每个棋子翻转或不翻转,共有216种情况. 3.IDA*搜索. #pragma comment(linker, "/STACK:102400000, 102400000") #include<cstdio> #include&l

POJ 1753(1)

按照训练计划,每天尽量往后刷吧 题意:一个4x4的棋盘,有黑有白,当这个棋盘上所有的棋子都是白或者都是黑,就结束了:每次翻转一个棋子,那么他的上下左右方向(如果不越界)都要翻转,即黑->白,白->黑: solve:把这十六个棋子转换成一个十六位的二进制数,因为二进制数只有0和1两种状态,所以,枚举一遍即可.先转换成二进制数:广搜:先将当前状态的每一个棋子翻转一遍看是否能够满足要求,如果不满足进入队列.用一个step数组记录步数. 代码是网上大牛的: #include <iostream&

黑白棋

一般棋子双面为黑白两色,故称"黑白棋".因为行棋之时将对方棋子翻转,变为己方棋子,故又称"翻转棋"(Reversi).棋子双面为红.绿色的称为"苹果棋". 棋子:黑白棋棋子每颗由黑白两色组成,一面白,一面黑,共64个(包括棋盘中央的4个).棋子呈圆饼形. 棋盘:黑白棋棋盘由64格的正方格组成,游戏进行时棋子要下在格内.棋盘可分为"角"."边"以及"中腹".现今的棋盘多以8x8较为普遍.

POJ1753:Flip Game

Flip Game Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 29713   Accepted: 12876 Description Flip game is played on a rectangular 4x4 field with two-sided pieces placed on each of its 16 squares. One side of each piece is white and the

[ACM] POJ 1753 Flip Game (枚举,BFS,位运算)

Flip Game Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 29921   Accepted: 12975 Description Flip game is played on a rectangular 4x4 field with two-sided pieces placed on each of its 16 squares. One side of each piece is white and the

POJ1753 状态压缩(+BFS) + 棋盘问题

0 棋盘问题,改变一个子的颜色,这个子以及这个子周围的四个位置(左右上下)的子分别变色,求最少的改变次数. 此类题大部分应该可以用状态压缩+暴力搜索解决.纯粹找规律不太合理. 1)第一种方法,状态压缩后BFS暴力搜索.因为棋盘很小,只有16个格子,枚举所有的状态共有2^16=65536种.所以有可以用int数组存储65535个状态用以确认哪一个出现了哪一个没出现,然后暴力枚举+BFS的搜索方式. 2)第二种,或者不进行状态压缩,直接按顺序,确定改变次数为1.改变次数为2...改变次数为16,在每

JZ模拟赛 8.9

B组: T1: 农夫约的假期 Description: 在某国有一个叫农夫约的人,他养了很多羊,其中有两头名叫mm和hh,他们的歌声十分好听,被当地人称为"魔音"······  农夫约也有自己的假期呀!他要去海边度假,然而mm和hh不能离开他.没办法,他只好把他们两个带上.  到了海边,农夫约把他的羊放在一个(n*n)的矩阵(有n*n个方格)里.mm和hh十分好动,他们要走到m(m<=n*n)个地方,第i个地方的坐标为(x[i](行),y[i](列)),每到一个地方他们会高歌一曲

证明与计算(5): 从加密哈希函数到一致性哈希

目录: ** 0x01 [哈希函数] vs [加密哈希函数] ** 0x02 [哈希碰撞] vs [生日问题] ** 0x03 [哈希表] vs [分布式哈希表] ** 0x04 [欧式距离] vs [三角不等式] ** 0x05 [异或距离] vs [前缀路由表] 0x01 [哈希函数] vs [加密哈希函数] 在哈希表计算索引的时候,我们需要一个哈希函数,通过hash(key)来计算key在哈希表里的index.这个地方的哈希函数只要尽量满足均匀分布,周期尽量大,计算速度又足够快等即可.而在