蓝桥杯 标题:纵横火柴旗子

【编程题】
    这是一个纵横火柴棒游戏。如图[1.jpg],在一个3x4的方格中,游戏的双方轮流放置火柴棒。其规则是:
    1. 不能放置在已经放置火柴棒的地方(即只能在空格中放置)。
    2. 火柴棒的方向只能是垂直或水平放置。
    3. 火柴棒不能与其它格子中的火柴“连通”。所谓连通是指两根火柴棒可以连成一条直线,且中间没有其它不同方向的火柴“阻拦”。
    例如:图[1.jpg]所示的局面下,可以在C2位置竖直放置,但不能水平放置,因为会与A2连通。同样道理,B2,B3,D2此时两种方向都不可以放置。但如果C2竖直放置后,D2就可以水平放置了,因为不再会与A2连通(受到了C2的阻挡)。
    4. 游戏双方轮流放置火柴,不可以弃权,也不可以放多根。直到某一方无法继续放置,则该方为负(输的一方)。

    游戏开始时可能已经放置了多根火柴。

    你的任务是:编写程序,读入初始状态,计算出对自己最有利的放置方法并输出。


    如图的局面表示为:
    00-1
    -000
    0100
    即用“0”表示空格位置,用“1”表示竖直放置,用“-”表示水平放置。
【输入、输出格式要求】
    用户先输入整数 n(n<100), 表示接下来输入 n 种初始局面,每种局面占3行(多个局面间没有空行)。
    程序则输出对应的每种初始局面,计算出的最佳走法(行号+列号+放置方式)。
    例如:用户输入:
    2
    0111
    -000
    -000
    1111
     ----
    0010
   则程序可以输出:
    00-
    211
   输出结果的含义为:
   对第一个局面,在第0行第0列水平放置
   对第二个局面,在第2行第1列垂直放置
   注意:
   行号、列号都是从0开始计数的。
   对每种局面可能有多个最佳放置方法(解不唯一),只输出一种即可。

   例如,对第一个局面,001 也是正解;最第二个局面,201也是正解。

  1. #include<iostream>
  2. using namespace std;
  3. char grid[3][4];
  4. char type[]={'1','-'};
  5. bool isPositon(int x,int y,char c)//判断该位置是否可以放
  6. {
  7. if(c=='1')//1有两种情况不能放,上下都不能为1,但可以用-隔开
  8. {
  9. for(int i=x-1;i>=0;i--)
  10. {
  11. if(grid[i][y]==c)
  12. return false;
  13. else
  14. break;
  15. }
  16. for(int i=x+1;i<3;i++)
  17. {
  18. if(grid[i][y]==c)
  19. return false;
  20. else
  21. break;
  22. }
  23. }
  24. else //-也有两种情况,左右不能为-,但可以用1隔开
  25. {
  26. for(int j=y-1;j>=0;j--)
  27. {
  28. if(grid[x][j]=='-')
  29. return false;
  30. else break;
  31. }
  32. for(int j=y+1;j<4;j++)
  33. {
  34. if(grid[x][j]=='-')
  35. return false;
  36. else break;
  37. }
  38. }
  39. return true;
  40. }
  41. bool isWin(int x,int y,char c)//判断在(x,y)放c能不能赢
  42. {
  43. if(!isPositon(x,y,c))//不能放
  44. return false;
  45. else
  46. {
  47. //枚举当前情况下,对方有没有赢的可能
  48. for(int i=0;i<3;i++)
  49. {
  50. for(int j=0;j<4;j++)
  51. {
  52. if(grid[i][j]=='0')
  53. {
  54. for(int k=0;k<2;k++)
  55. {
  56. grid[i][j]=type[k];
  57. if(isWin(i,j,type[k]))//对方能赢
  58. {
  59. grid[i][j]='0';
  60. return false;//我们就不能赢
  61. }
  62. grid[i][j]='0';
  63. }
  64. }
  65. }
  66. }
  67. return true;//能赢
  68. }
  69. }
  70. void Judge()
  71. {
  72. //枚举可以放的情况
  73. for(int i=0;i<3;i++)
  74. {
  75. for(int j=0;j<4;j++)
  76. {
  77. if(grid[i][j]=='0')
  78. {
  79. for(int k=0;k<2;k++)
  80. {
  81. grid[i][j]=type[k];
  82. if(isWin(i,j,type[k]))//放该位置能赢
  83. {
  84. cout<<i<<' '<<j<<' '<<type[k]<<endl;
  85. return ;
  86. }
  87. grid[i][j]='0';
  88. }
  89. }
  90. }
  91. }
  92. }
  93. int main()
  94. {
  95. int n;
  96. cin>>n;
  97. while(n--)
  98. {
  99. //输入数据
  100. for(int i=0;i<3;i++)
  101. {
  102. for(int j=0;j<4;j++)
  103. {
  104. cin>>grid[i][j];
  105. }
  106. }
  107. //枚举
  108. Judge();
  109. }
  110. }

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/549296.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

易语言源代码毁来者来了!!

2009年12月7号16:34分&#xff0c;恐怖现象在次出现了&#xff01; 在编译易程序时&#xff0c;突然提示&#xff0c;某某模块找不到了&#xff0c;我跑到软件目录下一看&#xff0c;妈啊不得了&#xff0c;目录中一百多个文件能删除的全部都被删除了&#xff0c;只剩余几个残破…

矩阵连乘 动态规划 详解

矩阵连乘问题----动态规划(转载)&#xff1a; 给定n个矩阵&#xff5b;A1,A2,…,An&#xff5d;&#xff0c;其中Ai与Ai1是可乘的&#xff0c;i1&#xff0c;2…&#xff0c;n-1。如何确定计算矩阵连乘积的计算次序&#xff0c;使得依此次序计算矩阵连乘积需要的数乘次数最少。…

网上威客的猫腻

近期在威客网上转了转 在国内的几大威客&#xff08;任务中国 taskcn,项目交易网sxsoft&#xff09;等上看了看 发现那竞标人真是多啊 经过一两次尝试&#xff08;想弄点小零花钱嘛&#xff09; 发现其中还真有不少猫腻 这里重灾区就是项目交易网 www.sxsoft.com 该网站是北京一…

php中mysql_connect与mysql_pconnect的区别

前阵子去面试被问到了mysql_connect跟mysql_pconnect的区别, 很不幸本人只答出一条, 似乎还没被认可~回来翻了下php手册记录之.简单的来说mysql_pconnect是用来在php与mysql间建立一条持续连接, 一般php的执行模式是脚本开始执行时初始化所有资源, 脚本运行结束后释放所有资源.…

软件测试-白盒测试(六种覆盖准则)

白盒测试过程中&#xff1a; 六种覆盖方法中&#xff1a;覆盖强度由弱到强的顺序依次是&#xff1a; 语句覆盖判定逻辑覆盖条件逻辑覆盖‘判断逻辑条件覆盖条件组合覆盖路径覆盖 举例&#xff1a; if(a&&b) {cab; } else {ca-b; }12345678 1.语句覆盖&#xff1a;…

Linux 的mv命令

命令格式:mv a b 总结起来有以下几种情况: a是文件名,b不存在 a改名为b。 a是文件名,b是文件名 a改名为b,原b被覆盖。 a是文件名,b是目录名,b下没有名为a的文件或目录 a移动到b目录下。 a是文件名,b是目录名,b下没有…

白盒测试中的六种覆盖方法及案例分析

语句覆盖是指选择足够的测试用例&#xff0c;使得运行这些测试用例时&#xff0c;被测程序的每一个语句至少执行一次&#xff0c;其覆盖标准无法发现判定中逻辑运算的错误&#xff1b;判定覆盖<又叫分支覆盖率>是指选择足够的测试用例&#xff0c;使得运行这些测试用例时…

回文数的C语言表述

2019独角兽企业重金招聘Python工程师标准>>> 现在的程序针对范围是0开始。直到溢出 #include #includemain(){ int i; /*本人的电脑用long和int一样*/for(i0;i<500;i){ if(svalue(i)) printf("%3d,",i); }getch();} int sv…

别人的爬虫在干啥

古人云博采众长&#xff0c;我们来看看其他人的爬虫是怎么学和用的&#xff1a; 爬虫文章 in 简书程序员专题&#xff1a; like:128 - Python 爬取落网音乐 like:127 - 【图文详解】python爬虫实战——5分钟做个图片自动下载器like:97 - 用Python写一个简单的微博爬虫like:87 …

windowsXP/7下消除快捷键箭头的方法

1.修改注册表。&#xff08;1&#xff09;启动注册表编辑器&#xff1a;点击 开始—运行里面输入“regedit”&#xff08;2&#xff09;然后依次展开如下分支&#xff1a;“HKEY_CLASSES_ROOT\lnkfile”&#xff1b;删除“lnkfile”子项中的“IsShortcut”字符串值项注意&#…

LVM( Logical Volume Manager )配置案例(on RHEL4)

LVM( Logical Volume Manager )配置案例(on RHEL4) 一 LVM配置步骤 1.准备一个分区 fdisk /dev/hda (或/dev/sda) 本案例中创建的分区为/dev/hda15 2.创建PV pvcreate /dev/hda15 如果有多少分区/dev/hda15,/dev/hda16&#xff0c;/dev/hda17,则可以 pvcreae /dev/hda1[5-7] 3.…

网络地址和广播地址

1.总述 IP地址使用32位二进数表示&#xff0c;每一个主机或路由器的接口都有全局唯一的IP地址&#xff08;NAT是个例外&#xff09;&#xff0c;它由网络号(NetID)和主机号(HostID)组成&#xff0c;它可以分为五类&#xff0c;如下&#xff1a; 2.地址划分 1&#xff09;A类地…

数据库 连接池、缓冲池(定义、原理)

数据库连接池的基本思想就是为数据库连接建立一个“缓冲池”。预先在缓冲池中放入一定数量的连接&#xff0c;当需要建立数据库连接时&#xff0c;只需要从缓冲池中取出一个了&#xff0c;使用完毕后再放回去。我们可以通过设定连接池最大数来防止系统无尽的与数据库连接。更为…

电子商务基础:中小企业建站方案和资源

目前国内的中小企业数量已经有几千万家&#xff0c;但信息化建设却并 不理想&#xff0c;拥有网站的只有不超过两百万家&#xff0c;数以千万计的中小企业存在电子商务需求&#xff0c;却没有自己独立的网站。现在&#xff0c;越来越多的企业意识到通过建立网站开展电子 商务的…

活动安排问题的 动态规划和贪心算法

这篇文章主要用来记录我对《算法导论》 贪心算法一章中的“活动选择问题”的动态规划求解和贪心算法求解 的思路和理解。 主要涉及到以下几个方面的内容&#xff1a; ①什么是活动选择问题—粗略提下&#xff0c;详细请参考《算法导论》 ②活动选择问题的DP(Dynamic program…

vc++操作mysql数据库的技巧

(调试此Demo需要将目录里的mydb子目录拷到MySQL安装目录的data子目录下&#xff08;我的是&#xff1a;D:\Program Files\MySQL\MySQL Server 5.0\data&#xff09;摘要&#xff1a;本文详细阐述了如何进行MySQL的安装、调试&#xff0c;以及如何用VC进行编译&#xff0c;实现数…

Hibernate——(3)主键生成策略持久化类的三种状态

一 持久化类 1.持久化&#xff1a;内存对象--->数据库&#xff08;硬盘&#xff09;Hibernate持久化的框架 持久化类&#xff1a;Java对象与数据库中的表建立映射关系 Hibernate就称为持久化类&#xff08;Java类映射文件&#xff09; 2.编写规则&#xff1a; …

技术有什么用?

最近在CTO俱乐部的一个讨论分享&#xff0c;关于技术和创新的作用&#xff1a; 技术向底层延伸&#xff0c;应该是科技&#xff0c;技术向上层延伸&#xff0c;应该是应用&#xff0c;如果单纯把技术看作工具&#xff0c;编码&#xff0c;实现或一种生存的手段&#xff0c;那就…

C# 二进制BinaryFormatter进行序列化与反序列化

原文链接&#xff1a;https://blog.csdn.net/e295166319/article/details/52790131 序列化又称串行化&#xff0c;是.NET运行时环境用来支持用户定义类型的流化的机制。其目的是以某种存储形成使自定义对象持久化&#xff0c;或者将这种对象从一个地方传输到另一个地方。 .NET框…

Algorithm学习笔记 --- 迷宫问题

版权声明&#xff1a;学习交流为主&#xff0c;未经博主同意禁止转载&#xff0c;禁止用于商用。 https://blog.csdn.net/u012965373/article/details/26376987 </div><link rel"stylesheet" href"https://csdnimg.cn/release/phoenix…