2.1.1 The Castle

简单的观察可以发现数字与墙之间有如下规律:

15-东西南北 14-东南北 13-东西南 12-东南 11-西北南 10-北南

9-西南 8-南 7-东西北 6-东北 5-东西 4-东 3-西北 2-北 1-西

注意:0也是, 就是周围没有墙。

主要是用flood fill,但是有一些细节:重载<的时候,扫描的时候。代码量有点大,不过思维量小,速度也还可以。

  1. /*
  2. ID: awsd1231
  3. PROG: castle
  4. LANG: C++
  5. */
  6. #include<iostream>
  7. #include<cstdio>
  8. #include<vector>
  9. #include<algorithm>
  10. using namespace std;
  11. struct T {
  12. int color;
  13. int value;
  14. T() : color(0) {}//初始化每个color为0
  15. }cas[50][50];
  16. int m, n;
  17. int c[2501] = {0};//统计每种颜色个数
  18. struct T2 {
  19. int s, x, y, turn;//turn 0down 1right
  20. }tmp;
  21. vector<T2> ans;
  22. bool operator < (T2 a, T2 b) {
  23. if(a.x != b.x) return a.x < b.x;
  24. if(a.y != b.y)return a.y > b.y;
  25. return a.turn < b.turn;
  26. }
  27. void floodFill(int x, int y, int color) {
  28. ++c[color];
  29. cas[y][x].color = color;
  30. switch (cas[y][x].value) {
  31. case 14 : if (!cas[y][x - 1].color) //left
  32. floodFill(x - 1, y, color);
  33. break;
  34. case 13 : if (!cas[y - 1][x].color) //up
  35. floodFill(x, y - 1, color);
  36. break;
  37. case 12 : if (!cas[y][x - 1].color) //left
  38. floodFill(x - 1, y, color);
  39. if (!cas[y - 1][x].color) //up
  40. floodFill(x, y - 1, color);
  41. break;
  42. case 11 : if (!cas[y][x + 1].color) // right
  43. floodFill(x + 1, y, color);
  44. break;
  45. case 10 : if (!cas[y][x - 1].color) // left
  46. floodFill(x - 1, y, color);
  47. if (!cas[y][x + 1].color) // right
  48. floodFill(x + 1, y, color);
  49. break;
  50. case 9 : if (!cas[y][x + 1].color) // right
  51. floodFill(x + 1, y, color);
  52. if (!cas[y - 1][x].color) // up
  53. floodFill(x, y - 1, color);
  54. break;
  55. case 8 : if (!cas[y][x - 1].color) // left
  56. floodFill(x - 1, y, color);
  57. if (!cas[y][x + 1].color) // right
  58. floodFill(x + 1, y, color);
  59. if (!cas[y - 1][x].color) // up
  60. floodFill(x, y - 1, color);
  61. break;
  62. case 7 : if (!cas[y + 1][x].color) // down
  63. floodFill(x, y + 1, color);
  64. break;
  65. case 6 : if (!cas[y][x - 1].color)// left
  66. floodFill(x - 1, y, color);
  67. if (!cas[y + 1][x].color)//down
  68. floodFill(x, y + 1, color);
  69. break;
  70. case 5 : if (!cas[y - 1][x].color) // up
  71. floodFill(x, y - 1, color);
  72. if (!cas[y + 1][x].color) // down
  73. floodFill(x, y + 1, color);
  74. break;
  75. case 4 : if (!cas[y][x - 1].color) // left
  76. floodFill(x - 1, y, color);
  77. if (!cas[y - 1][x].color) // up
  78. floodFill(x, y - 1, color);
  79. if (!cas[y + 1][x].color) // down
  80. floodFill(x, y + 1, color);
  81. break;
  82. case 3 : if (!cas[y][x + 1].color) // right
  83. floodFill(x + 1, y, color);
  84. if (!cas[y + 1][x].color) // down
  85. floodFill(x, y + 1, color);
  86. break;
  87. case 2 : if (!cas[y][x + 1].color) // right
  88. floodFill(x + 1, y, color);
  89. if (!cas[y][x - 1].color) // left
  90. floodFill(x - 1, y, color);
  91. if (!cas[y + 1][x].color) // down
  92. floodFill(x, y + 1, color);
  93. break;
  94. case 1 : if (!cas[y][x + 1].color) // right
  95. floodFill(x + 1, y, color);
  96. if (!cas[y + 1][x].color) // down
  97. floodFill(x, y + 1, color);
  98. if (!cas[y - 1][x].color) // up
  99. floodFill(x, y - 1, color);
  100. break;
  101. case 0 : if (!cas[y][x + 1].color) // right
  102. floodFill(x + 1, y, color);
  103. if (!cas[y][x - 1].color) // left
  104. floodFill(x - 1, y, color);
  105. if (!cas[y + 1][x].color) // down
  106. floodFill(x, y + 1, color);
  107. if (!cas[y - 1][x].color) // up
  108. floodFill(x, y - 1, color);
  109. break;
  110. }
  111. }
  112. int main() {
  113. freopen("castle.in", "r", stdin);
  114. freopen("castle.out", "w", stdout);
  115. scanf("%d%d", &m, &n);
  116. for (int i = 0; i != n; ++i) {
  117. for (int j = 0; j != m; ++j) {
  118. scanf("%d", &cas[i][j].value);
  119. }
  120. }
  121. int co(0);//赋颜色co
  122. for (int i = 0; i != n; ++i) {
  123. for (int j = 0; j != m; ++j) {
  124. if (cas[i][j].color == 0)
  125. floodFill(j, i, ++co);
  126. }
  127. }
  128. int maxS(0);
  129. for (int i = 0; i != co; ++i) {
  130. if(maxS < c[i + 1]) maxS = c[i + 1];
  131. }
  132. cout << co << endl << maxS << endl;
  133. tmp.s = tmp.x = tmp.y = tmp.turn = -1;
  134. ans.push_back(tmp);//初始化,让ans不为空
  135. for (int i = 0; i != n; ++i) {
  136. for (int j = 0; j != m - 1; ++j) {
  137. if (cas[i][j].color != cas[i][j + 1].color) {
  138. int S = c[cas[i][j].color] + c[cas[i][j + 1].color];
  139. if (S >= ans[0].s) {
  140. tmp.s = S;
  141. tmp.x = j;
  142. tmp.y = i;
  143. tmp.turn = 1;
  144. if (S > ans[0].s) ans.clear();
  145. ans.push_back(tmp);
  146. }
  147. }
  148. }
  149. }
  150. for (int i = n; i != 1; --i) {
  151. for (int j = 0; j != m; ++j) {
  152. if(cas[i][j].color != cas[i - 1][j].color) {
  153. int S = c[cas[i][j].color] + c[cas[i - 1][j].color];
  154. if (S >= ans[0].s) {
  155. tmp.s = S;
  156. tmp.x = j;
  157. tmp.y = i;
  158. tmp.turn = 0;
  159. if (S > ans[0].s) {
  160. ans.clear();
  161. }
  162. ans.push_back(tmp);
  163. }
  164. }//cout << "***" << endl;// 可以执行
  165. }//cout << "**" << endl;
  166. }
  167. cout << ans[0].s << endl;
  168. sort(ans.begin(), ans.end());
  169. cout << ans[0].y + 1 << " " << ans[0].x + 1 << " ";
  170. if(ans[0].turn) cout << "E" << endl;
  171. else cout << "N" << endl;
  172. return 0;
  173. }

来自为知笔记(Wiz)

时间: 2024-10-15 23:33:24

2.1.1 The Castle的相关文章

再论IBatisNet + Castle进行项目的开发

随着项目的进展,Castle和IBatisNet给我的惊喜更多.Com+很重,不需要分布式的中小项目慎用,NHibernate虽好,NHibernate的2005-9-20发布了最新版本1.0-rc1,缺少高水平的OO设计师,项目组程序员水平参次不齐 ,应用Castle + IBatisnet大家不会再把精力浪费到数据访问,事务处理,主键生成等地方了,可以集中精力进行业务组件的编写.项目的进展很顺利.    从架构上讲,Castle作为轻量级Ioc容器无疑要位于高位,所以iBatisNet现在只

升级个人网站框架组件IBatisNet+Castle

<sqlMap namespace="Sequence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  xsi:noNamespaceSchemaLocation="SqlMap.xsd"> -- </sqlMap> 更改为 <?xml version="1.0" encoding="UTF-8" ?> &l

应用IBatisNet+Castle进行项目的开发

最近在做一个项目,项目的需求不够明确,这是做项目的大忌,但是没有办法.项目的架构采用Dotnet平台使用C#进行开发,为了加快项目的开发进度,采用代码生成工具之MyGeneration 生成业务基本代码,数据持久层采用IBatisNet,事务处理采用Castle的事务处理代码块,整体采用Castle IOC容器进行组装.       IBatisNet的SQL语句放在XML文件中,SQL语句同代码的分离,带来的好处很多,修改数据库的结构,只需要使用代码生成器生成XML文件和数据库表对应的业务实体

在asp.net页面上得到Castle容器的实例

在项目中使用Castle IOC容器,Asp.net程序中如何得到Castle容器内. 可以如下实现: 1.Gloabal实现接口IContainerAccessor public class Global : System.Web.HttpApplication, IContainerAccessor      { /// <summary>         /// 必需的设计器变量.         /// </summary>          private System.

对Castle Windsor的Resolve方法的解析时new对象的探讨

依赖注入框架Castle Windsor从容器里解析一个实例时(也就是调用Resolve方法),是通过调用待解析对象的构造函数new一个对象并返回,那么问题是:它是调用哪个构造函数呢? 无参的构造函数 带参但参数不是靠依赖注入的构造函数 带参且参数是靠依赖注入的构造函数 有多个带参且参数是靠依赖注入的构造函数 带着这个问题,我写了一段测试代码. 测试1: 只有一个无参构造函数: CtorTest类(在控制台程序里用Windsor解析这个类) public class CtorTest { pub

NET Core 整合Autofac和Castle

NET Core 整合Autofac和Castle 阅读目录 前言: 1.ASP.NET Core中的Autofac 2.整合Castle的DynamicProxy 3.注意事项 回到目录 前言: 除了ASP.NETCore自带的IOC容器外,我们还可以使用其他成熟的DI框架,如Autofac,StructureMap等(笔者只用过Unity,Ninject和Castle). 回到目录 1.ASP.NET Core中的Autofac 首先在Project.json的Dependency节点为中添

洛谷P1457 城堡 The Castle

P1457 城堡 The Castle 137通过 279提交 题目提供者该用户不存在 标签USACO 难度提高+/省选- 提交  讨论  题解 最新讨论 暂时没有讨论 题目描述 我们憨厚的USACO主人公农夫约翰(Farmer John)以无法想象的运气,在他生日那天收到了一份特别的礼物:一张“幸运爱尔兰”(一种彩票).结果这张彩票让他获得了这次比赛唯一的奖品——坐落于爱尔兰郊外的一座梦幻般的城堡! 喜欢吹嘘的农夫约翰立刻回到有着吹嘘传统的威斯康辛老家开始吹嘘了, 农夫约翰想要告诉他的奶牛们关

Autofac 之 基于 Castle DynamicProxy2 的 Interceptor 功能

Autofac 结合 Castle DynamicProxy2 功能 Autofac 不仅作为轻量级高效的 IoC 容器,而且还能很好的与 Castle.DynamicProxy2 结合起来,实现 AOP 功能. 首先,我们需要定义拦截器,简单的定义可实现 Castle.DynamicProxy.IInterceptor 接口即可. 添加拦截器   定义好了拦截器后,如何应用到相关对象呢?有两种方式: 1)使用 Autofac.Extras.DynamicProxy2.InterceptAttr

Castle Core 4.0.0 alpha001发布

时隔一年多以后Castle 项目又开始活跃,最近刚发布了Castle Core 4.0.0 的alpha版本,主要包括的内容是DynamicProxy 和 DictionaryAdapter,日志集成工作正在开发中,这个版本主要针对的是.NET Core版本的更新. Castle.DynamicProxy可以实现动态代理的功能,这个也是很多框架的基础.也就是说它是众多开源项目向.NET Core兼容的重要基础组件.在IBatis.Net中就是使用了Castle.DynamicProxy来实现数据

分享一个简单程序(webApi+castle+Automapper+Ef+angular)

前段时间在周末给朋友做了一个小程序,用来记录他们单位的一些调度信息(免费,无版权问题).把代码分享出来.整个程序没有做任何架构.但是麻雀虽小,用到的技术也没少.WebApi+Castle+AutoMapper+Ef+angular,日志记录Log4net.初学者可以学习借鉴,虽然做的比较仓促,但是自我感觉代码写的还是比较规范. git地址:https://git.oschina.net/richieyangs/TaskRecord.git 只需修改web.config中的连接字符串,Ctrl+F