博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
NEERC, Northern Subregional Contest 2012 B 乱搞or搜索
阅读量:5057 次
发布时间:2019-06-12

本文共 2899 字,大约阅读时间需要 9 分钟。

题意:给你10×10的格子 有 1艘 4格的船, 2艘3格的,3艘2格的,4艘1格的。每艘船只能横着或者竖着,但是不能相邻(叫相邻也不行) 现在给你每个格子的攻击时间,有且仅有所有船下面所有的格子都被攻击以后,船沉没,当所有格子沉没以后,测试结束,问你结束的最长时间是多少。

解题思路:把100那个位置覆盖掉,搜索或者直接填都行。

解题代码:

1 // File Name: 12906.cpp  2 // Author: darkdream  3 // Created Time: 2014年08月17日 星期日 14时16分54秒  4   5 #include
6 #include
7 #include
8 #include
9 #include
10 #include
11 #include
12 #include
13 #include
14 #include
15 #include
16 #include
17 #include
18 #include
19 #include
20 #include
21 #include
22 #include
23 #include
24 #define LL long long 25 26 using namespace std; 27 int mp[20][20]; 28 int check(int i,int j) 29 { 30 int sum = 0 ; 31 if(i <= 10 && i >= 1 && j <= 10 && j >=1 ) 32 { 33 sum += mp[i+1][j] + mp[i][j] + mp[i-1][j] +mp[i][j+1] + mp[i][j-1] + mp[i+1][j+1] + mp[i+1][j-1] + mp[i-1][j+1] + mp[i-1][j-1] ; 34 if(sum == 0 ) 35 return 1; 36 return 0 ; 37 } 38 return 0 ; 39 } 40 int ship[] = { 0,4,3,3,2,2,2,1,1,1,1}; 41 int hs[20]; 42 int dfs(int x, int y , int k ,int dis) 43 { 44 if(k == 1 ) 45 return 1; 46 if(dis == 1) 47 { 48 int tx = x + 1; 49 int ty = y; 50 if(check(tx,ty)) 51 { 52 if(dfs(tx,ty,k-1,dis)) 53 { 54 mp[tx][ty] =1 ; 55 return 1; 56 } 57 }else{ 58 return 0 ; 59 } 60 }else if(dis == 2){ 61 int tx = x -1; 62 int ty = y; 63 if(check(tx,ty)) 64 { 65 if(dfs(tx,ty,k-1,dis)) 66 { 67 mp[tx][ty] =1 ; 68 return 1; 69 } 70 }else{ 71 return 0 ; 72 } 73 74 }else if(dis == 3){ 75 int tx = x; 76 int ty = y+1; 77 if(check(tx,ty)) 78 { 79 if(dfs(tx,ty,k-1,dis)) 80 { 81 mp[tx][ty] =1 ; 82 return 1; 83 } 84 }else{ 85 return 0 ; 86 } 87 88 }else { 89 int tx = x; 90 int ty = y-1; 91 if(check(tx,ty)) 92 { 93 if(dfs(tx,ty,k-1,dis)) 94 { 95 mp[tx][ty] =1 ; 96 return 1; 97 } 98 }else{ 99 return 0 ; 100 }101 102 }103 return 0 ;104 }105 void solve(int x, int y )106 {107 //printf("%d %d\n",x,y);108 for(int i = 1;i <= 9 ;i ++)109 if(hs[i] == 0 )110 for(int j = 1;j <= 4 ;j ++)111 {112 if(dfs(x,y,ship[i],j))113 { 114 mp[x][y] = 1;115 hs[i] = 1; 116 return ;117 }118 }119 }120 int main(){121 int temp ; 122 while(scanf("%d",&temp) != EOF)123 {124 memset(mp,0,sizeof(mp));125 memset(hs,0,sizeof(hs));126 if(temp == 100 )127 {128 mp[1][1] = 1; 129 }130 for(int i = 2;i <= 10;i ++)131 {132 scanf("%d",&temp);133 if(temp == 100 )134 {135 mp[1][i] = 1; 136 }137 }138 for(int i = 2;i <= 10;i ++)139 {140 141 for(int j = 1;j <= 10; j ++)142 {143 scanf("%d",&temp);144 if(temp == 100 )145 {146 mp[i][j] = 1; 147 }148 }149 }150 for(int i =1;i <= 10;i ++)151 {152 for(int j = 1;j <= 10; j ++)153 {154 if(check(i,j))155 {156 solve(i,j);157 }158 }159 }160 for(int i =1;i <= 10 ;i ++)161 { for(int j = 1;j <= 10 ;j ++)162 {163 if(mp[i][j])164 {165 printf("#");166 }else printf(".");167 }168 printf("\n");169 }170 }171 return 0;172 }
View Code

 

转载于:https://www.cnblogs.com/zyue/p/3918855.html

你可能感兴趣的文章
SQLServer函数 left()、charindex()、stuff()的使用
查看>>
VBS 映射远程电脑磁盘
查看>>
ajax控件无法使用 iis配置及web修改
查看>>
plsql通过instantclient连接oracle数据库报连接超时
查看>>
亿级SQL Server运维的最佳实践PPT分享
查看>>
快速理解高性能HTTP服务端的负载均衡技术原理(转)
查看>>
BZOJ 3038: 上帝造题的七分钟2
查看>>
BZOJ 3402: [Usaco2009 Open]Hide and Seek 捉迷藏
查看>>
MapReduce详解及shuffle阶段
查看>>
css可视化格式模式
查看>>
HDU1257最少拦截系统
查看>>
[bzoj3273]liars
查看>>
Graph_Master(连通分量_B_Trajan+完全图)
查看>>
【Shiro】四、Apache Shiro授权
查看>>
Alpha阶段个人总结
查看>>
作业一:android开发平台的演变以及Android Studio设置
查看>>
RAC改动归档文件夹
查看>>
nyoj 14 会场安排问题
查看>>
Linux 的启动流程
查看>>
Hadoop自学笔记(一)常见Hadoop相关项目一览
查看>>