zoj_1002
2015-08-13 22:39
239 查看
终于把这题A了,在阅读了多人的博客的情况下,接着找这类题继续做
继续加油
#include <stdio.h> #include <string.h> #include <stdlib.h> #define MAXSIZE 10 char v[MAXSIZE][MAXSIZE]; //0 -> null 1 -> block 2 -> fire int ans = 0, step = 0, cnt = 0; int line; int find(int m, int n){ for(int i = m; i <= line; ++i){ if(v[i] == 1) return 0; if(v[i] == 2) break; } for(int i = m; i >= 1; --i){ if(v[i] == 1) return 0; if(v[i] == 2) break; } for(int i = n; i <= line; ++i){ if(v[m][i] == 1) return 0; if(v[m][i] == 2) break; } for(int i = n; i >= 1; --i){ if(v[m][i] == 1) return 0; if(v[m][i] == 2) break; } return 1; } int dfs(){ if(cnt >= ans){ ans = cnt; } for(int i = 1; i <= line; ++i){ for(int j = 1; j <= line; ++j){ if(!v[i][j] && find(i, j)){ v[i][j] = 1; cnt++; dfs(); v[i][j] = 0; cnt--; } } } return ans; } int main(){ char ch; while(scanf("%d", &line) && line){ memset(v, 2, sizeof(v)); ans = 0; for(int i = 1; i <= line; ++i){ getchar(); for(int j = 1; j <= line; ++j){ scanf("%c", &ch); if(ch == '.') v[i][j] = 0; else if(ch == 'X') v[i][j] = 2; } } dfs(); printf("%d\n", ans); } return 0; }
继续加油
相关文章推荐
- Discuz论坛 创始人/超级管理员密码忘记解决办法!
- 【MySql】使用记录<七>
- HDU 5389 Zero Escape (MUT#8 dp优化)
- justfun
- 华为训练题:高级——火车进站(栈与队列,递归)
- C++调用Lua的性能测试
- 3.建造者模式(设计模式笔记)
- Innodb/MyISAM在自增/UUID主键下的性能与索引空间比较
- Linux用户和用户组管理-用户管理命令passwd/usermod/chage/userdel/su***用户组管理命令
- Havok_2014-1-0_Pc_Xs_User_Guide(2.2.2-模拟仿真一个Physics2012世界)
- java 接口继承接口作用
- linux tomcat 的安装
- Android消息队列图片记录
- php internal(php体系结构和原理)
- linux 之静默安装oracle
- nginx的配置详解
- 为什么计算机时间和众多编程语言要从1970年1月1日开始算起
- ATF Textures
- opencv识别正方形(矩形)代码
- 为什么计算机时间和众多编程语言要从1970年1月1日开始算起