翻转棋

时间限制(普通/Java) : 1000 MS/ 3000 MS          运行内存限制 : 65536 KByte
总提交 : 41            测试通过 : 20 

比赛描述

翻转棋的棋盘上有64颗棋子,排列成8×8的矩阵。每颗棋子的正反两面分别被涂成白色和黑色。在初始状态下,其中有一些棋子正面朝上(白色),其余的则背面朝上(黑色)。你可以进行如下翻转操作——翻转任意一颗棋子,与此同时与它相邻的上下左右四颗棋子也必须一同翻面。现在给出棋盘的初始状态,请编程计算出至少要进行多少次翻转操作才能让所有的棋子黑色的一面朝上。

输入

输入的第一行是一个正整数N,代表有N组输入数据。每组数据包含一个8×8的矩阵表示棋盘的初始状态,‘0’代表白色,‘1’代表黑色。两组数据之间以一个空白行分隔。

输出

对于每一组输入数据,输出一行“Case #: n”。其中‘#’为这一组输出的序号,n为让所有棋子反面向上最少所需的翻转次数。

样例输入

2
10111111
00011111
10111111
11111111
11111111
11111111
11111111
11111111

10110001
00011011
10111111
11111111
11111011
11110001
11111111
11110001

样例输出

Case 1: 1
Case 2: 4

提示

题目来源

lithium

#include<iostream>#define N 8
char a[N][N];
char b[N][N];
int dx[4] = { 0, 0,-1, 1};
int dy[4] = {-1, 1, 0, 0};
int minCount;void convert(int i,int j){int k,x,y;b[i][j] = !b[i][j];for(k=0;k<4;k++){x = i+dx[k];y = j+dy[k];if(x>=0 && x<N && y>=0 && y<N){b[x][y] = !b[x][y];}}
}void handle(int k){int i,j,count=0;for(i=0;i<N;i++){for(j=0;j<N;j++){b[i][j] = a[i][j];}}for(j=0;j<N;j++){if(k & (1<<j)){convert(0,j);count++;}}for(i=1;i<N;i++){for(j=0;j<N;j++){if(0==b[i-1][j]){convert(i,j);count++;}}}for(j=0;j<N;j++){if(b[N-1][j]==0){return;}}if(count < minCount){minCount = count;}
}int main(){
//  freopen("test.txt","r",stdin);int t,i,j,k;scanf("%d",&t);getchar();for(int cas=1;cas<=t;cas++){minCount = INT_MAX;for(i=0;i<N;i++){for(j=0;j<N;j++){a[i][j] = getchar();a[i][j] -= '0';}getchar();}getchar();
//      for(i=0;i<N;i++){
//          for(j=0;j<N;j++){
//              printf("%d",a[i][j]);
//          }
//          printf("\n");
//      }for(k=0;k<255;k++){handle(k);}printf("Case %d: %d\n",cas,minCount);}
}

南邮 OJ 1652 翻转棋相关推荐

  1. 南邮 OJ 1484 烧饼重叠问题

    烧饼重叠问题 时间限制(普通/Java) : 1000 MS/ 3000 MS          运行内存限制 : 65536 KByte 总提交 : 87            测试通过 : 12 ...

  2. 南邮 OJ 1076 机器狗组装费用

    机器狗组装费用 时间限制(普通/Java) :  1500 MS/ 4500 MS          运行内存限制 : 65536 KByte 总提交 : 513            测试通过 : ...

  3. 南邮 OJ 1668 撼地神牛

    撼地神牛 时间限制(普通/Java) : 1000 MS/ 3000 MS          运行内存限制 : 65536 KByte 总提交 : 780            测试通过 : 77 比 ...

  4. 南邮 OJ 1987 集训队选拔

    集训队选拔 时间限制(普通/Java) : 1000 MS/ 3000 MS          运行内存限制 : 65536 KByte 总提交 : 823            测试通过 : 303 ...

  5. 南邮 OJ 1128 An Industrial Spy

    An Industrial Spy 时间限制(普通/Java) :  10000 MS/ 30000 MS          运行内存限制 : 65536 KByte 总提交 : 38         ...

  6. 南邮 OJ 2001 水獭看动漫

    水獭看动漫 时间限制(普通/Java) : 1000 MS/ 3000 MS          运行内存限制 : 65536 KByte 总提交 : 103            测试通过 : 31 ...

  7. 南邮 OJ 2043 有才华的罗老师

    有才华的罗老师 时间限制(普通/Java) :  2000 MS/ 6000 MS          运行内存限制 : 65536 KByte 总提交 : 60            测试通过 : 3 ...

  8. 南邮 OJ 1176 高斯求和

    高斯求和 时间限制(普通/Java) : 1000 MS/ 3000 MS          运行内存限制 : 65536 KByte 总提交 : 3327            测试通过 : 568 ...

  9. 南邮 OJ 1446 嘉娃的难题

    嘉娃的难题 时间限制(普通/Java) : 1000 MS/ 3000 MS          运行内存限制 : 65536 KByte 总提交 : 127            测试通过 : 43 ...

最新文章

  1. java mybatis基础
  2. Android线程池简单使用
  3. Android studio 报错解决:Error:SSL peer shut down incorrectly
  4. [AngularJS] “多重路由”嵌套模块——AngularJS“路由”嵌套学习资料教程
  5. Spring 是解析配置类过程详解
  6. 笔记-高项案例题-2009年上-需求管理
  7. junit4 javaee 5.0 jpa SSH 单元测试问题集锦
  8. System.Web.HttpRequestValidationException——从客户端检测到危险的Request值
  9. 174. Dungeon Game 地下城游戏
  10. 27.怎样在Swift中声明typedef?
  11. 学习关于时间在sql里面的对比,用if语句(这个有点特别)
  12. Linux中fork的秘密
  13. DSP C2000汇编语言,DSPC2000汇编指令
  14. linux ntp时间立即同步命令_记一次生产环境部署NTP服务及配置时间同步
  15. ipv6路由协议配置_IPV6寻址,标头和路由协议
  16. 颇有微词 小模式 大蓝海 by 曹继忠 - 2013中国SEO排行榜
  17. codeFight-Python编程训练(2)
  18. MySQL Config--参数system_time_zone和参数time_zone
  19. 学知识的时候,把自己放的低一点
  20. mysql开发与运维_专业的MySQL开发规范

热门文章

  1. 商品规格属性(SKU)组合算法
  2. Javascript静态变量与实例变量
  3. Ubuntu14.04 LTS更新源
  4. Mac上备份iphone照片
  5. 3种iPhone手机数据备份,轻松备份和恢复数据
  6. 操作ROS 的 msg文件 和 srv文件
  7. 虹科技术 | 终端入侵防御 | 在重大攻击中发现新的Babuk勒索软件
  8. Undirected Vertex Geography
  9. Java Swing JButton:按钮组件
  10. Spark面试,Spark面试题,Spark面试汇总