`
coolsooner
  • 浏览: 1308060 次
文章分类
社区版块
存档分类
最新评论

堡垒问题(贪心) 解题报告

 
阅读更多

描述:

城堡是一个4×4的方格,为了保卫城堡,现需要在某些格子里修建一些堡垒。城堡中的某些格子是墙,其余格子都是空格,堡垒只能建在空格里,每个堡垒都可以向上下左右四个方向射击,如果两个堡垒在同一行或同一列,且中间没有墙相隔,则两个堡垒都会把对方打掉。问对于给定的一种状态,最多能够修建几个堡垒。


输入:

每个测例以一个整数n(1<=n<=4)开始,表示城堡的大小。接下来是n行字符每行n个,‘X’表示该位置是墙,‘.’表示该位置是空格。n等于0标志输入结束。


输出:

每个测例在单独的一行输出一个整数:最多修建堡垒的个数。


输入样例:

4
.X..
....
XX..
....
2
XX
.X
3
.X.
X.X
.X.
3
...
.XX
.XX
4
....
....
....
....
0


输出样例:

5
1
5
2
4
解题思路:首先用贪心,现在X的附近布满,然后扫描一遍,去掉不符合,增加符合条件的,对此计数即可。主要是对数据的处理。
代码如下:
Code:
  1. #include<iostream>
  2. usingnamespacestd;
  3. intManage_Data(intn);
  4. chardata[4][4];
  5. intmain()
  6. {
  7. intn;
  8. cin>>n;
  9. while(n)
  10. {
  11. for(inti=0;i<n;i++)
  12. {
  13. for(intj=0;j<n;j++)
  14. cin>>data[i][j];
  15. }
  16. cout<<Manage_Data(n)<<endl;
  17. cin>>n;
  18. }
  19. return0;
  20. }
  21. intManage_Data(intn)
  22. {
  23. for(inti=0;i<n;i++)//先在X的附近放
  24. {
  25. for(intj=0;j<n;j++)
  26. {
  27. if(data[i][j]=='X')
  28. {
  29. if(i>0&&data[i-1][j]!='X')
  30. data[i-1][j]='y';
  31. if(i<n-1&&data[i+1][j]!='X')
  32. data[i+1][j]='y';
  33. if(j>0&&data[i][j-1]!='X')
  34. data[i][j-1]='y';
  35. if(j<n-1&&data[i][j+1]!='X')
  36. data[i][j+1]='y';
  37. }
  38. }
  39. }
  40. intsum=0;
  41. for(i=0;i<n;i++)//扫描,去掉不符合条件的,增加符合条件的
  42. {
  43. for(intj=0;j<n;j++)
  44. {
  45. intstate=0;
  46. if(data[i][j]=='y')
  47. {
  48. for(signedintstep=i-1;step>=0;step--)
  49. {
  50. if(data[step][j]=='y')
  51. {
  52. state=1;
  53. break;
  54. }
  55. elseif(data[step][j]=='X')
  56. break;
  57. }
  58. for(step=j-1;step>=0;step--)
  59. {
  60. if(data[i][step]=='y')
  61. {
  62. state=1;
  63. break;
  64. }
  65. elseif(data[i][step]=='X')
  66. break;
  67. }
  68. if(state==0)
  69. sum++;
  70. else
  71. data[i][j]='.';
  72. }
  73. elseif(data[i][j]=='.')
  74. {
  75. for(signedintstep=i-1;step>=0;step--)
  76. {
  77. if(data[step][j]=='y')
  78. {
  79. state=1;
  80. break;
  81. }
  82. elseif(data[step][j]=='X')
  83. break;
  84. }
  85. for(step=i+1;step<n;step++)
  86. {
  87. if(data[step][j]=='y')
  88. {
  89. state=1;
  90. break;
  91. }
  92. elseif(data[step][j]=='X')
  93. break;
  94. }
  95. for(step=j-1;step>=0;step--)
  96. {
  97. if(data[i][step]=='y')
  98. {
  99. state=1;
  100. break;
  101. }
  102. elseif(data[i][step]=='X')
  103. break;
  104. }
  105. for(step=j+1;step<n;step++)
  106. {
  107. if(data[i][step]=='y')
  108. {
  109. state=1;
  110. break;
  111. }
  112. elseif(data[i][step]=='X')
  113. break;
  114. }
  115. if(state==0)
  116. {
  117. sum++;
  118. data[i][j]='y';
  119. }
  120. }
  121. }
  122. }
  123. returnsum;
  124. }
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics