hdu 1045 Fire Net(dfs)
2016-01-27 18:59
295 查看
题意:给出一个n和一幅N*N的图,图中包含'.'和'X'两种字符'.'表示路,'X'表示墙,要求在'.'上面放碉堡,碉堡能攻击他所在的行和列,但不能攻击墙,求最多能放多少个碉堡。
思路:数据量不大,dfs搜索每一个点,并判断点所在的行列是否满足条件。
思路:数据量不大,dfs搜索每一个点,并判断点所在的行列是否满足条件。
#include <iostream> #include <string.h> using namespace std; const int MAX = 6; int point[4][2] = {-1,0,0,-1,1,0,0,1}; int n; char map[MAX][MAX]; int max1; int judge(int mid_x,int mid_y)//判断该点所在行和列有没有炮台 { int i; int mark = 1; for(i=0; i<4; i++) { int x,y; x = mid_x; y = mid_y; while(1) { x = x + point[i][0]; y = y + point[i][1]; if( map[x][y] == '@') { mark = 0; break; } else { if(map[x][y] == 'X') { break; } else { if(x<1 || y<1 || x>n || y>n) { break; } } } } } return mark; } void DFS(int rank) { int i,j; for(i=1; i<=n; i++) { for(j=1; j<=n; j++) { if(map[i][j] == '.' && judge(i,j))//如果该点是路而且所在行列没有炮台 { map[i][j] = '@'; DFS(rank+1); map[i][j] = '.'; } } } if(max1 < rank) { max1 = rank; } return ; } int main() { while(cin>>n,n) { memset(map,0,sizeof(map)); int i,j; for(i=1; i<=n; i++) { for(j=1; j<=n; j++) { cin>>map[i][j]; } } max1 = 0; DFS(0); cout<<max1<<endl; } return 0; }
相关文章推荐
- python 协程小程序(草稿有待完善)
- 1023. 组个最小数 (20)
- 无题
- iOS-NSNumber对象介绍
- nginx在centos7下开启80端口
- Android异常汇集----4. Jar mismatch! Fix your dependencies
- SpringMVC与Easyui(实现了JSON的展示)、FreeMarker的整合
- 读取PNG颜色索引数据
- aa
- 欧拉计划·第四题
- 心理学--普及
- 存储系统-Linux磁盘分区管理
- Shell条件判断总结
- 开发者日志(2016年01月27日18:31:16):关于android 动画学习
- log4j配置与配置相关
- MySQL优化方法
- 人生百味,浓缩到最后就是一个淡字
- rsync + inotify
- iOS动态适应UITextView高度
- ASP.NET SignalR 与LayIM配合,轻松实现网站客服聊天室(四) 添加表情、群聊功能