Fire Net
2016-02-13 16:01
429 查看
#include<iostream> #include<string> #include<string.h> #include<math.h> #include<cstdio> #include<stack> #include<queue> #include<set> using namespace std; char mapp[5][5]; int best,n; int dir[4][2]={{1,0},{0,1},{-1,0},{0,-1}}; bool canPut(int x,int y){ //第x行,第y列 for(int i=y-1;i>=0;i--){ if(mapp[x][i]=='1') return false; if(mapp[x][i]=='X') break; } for(int i=x-1;i>=0;i--){ if(mapp[i][y]=='1') return false; if(mapp[i][y]=='X') break; } return true; } void dfs(int k,int current){ //cout<<k<<" "<<current<<endl; if(k==n*n){ if(best<current){ best=current; // cout<<best<<" best"<<endl; return ; } } else{ int x=k/n; int y=k%n; // if(k==2) cout<<x<<" "<<y<<" 2"<<endl; if(mapp[x][y]=='.'&&canPut(x,y)){ mapp[x][y]='1'; // cout<<x<<" "<<y<<"放置跑 "<<endl; dfs(k+1,current+1); mapp[x][y]='.'; } dfs(k+1,current); } } int main(){ while(cin>>n){ memset(mapp,0,sizeof(mapp)); if(n==0) break; for(int i=0;i<n;i++){ for(int j=0;j<n;j++){ cin>>mapp[i][j]; } } best=0; dfs(0,0); cout<<best<<endl; /*深度优先搜索:每次遍历全局,注意回溯,规定放了炮弹的为1,不放的为0 找到最大的数目。 判断能不能放 */ } return 0; }
相关文章推荐
- redis练习手册<八>string主要操作函数小结
- 278. First Bad Version LeetCode
- 在外国人眼中为什么功夫文化在中国如此流行
- java 泛型学习
- 微软公司数据结构+算法面试题
- poj--1101--The Game(bfs)
- 棋盘覆盖(大数问题)
- 单片机C语言 串口传输 结构体
- 【CODEVS2152】滑雪
- poj--1101--The Game(bfs)
- H5拖曳文件上传示例
- POJ 3276 尺取法
- 数据源与连接池 3
- U盘装机大师实现gpt转mbr分区表格式图文教程
- C++共用数据的保护
- 207 Course Schedule
- ACCESS作为网站数据库的弊端
- 格式化数据#7:开放课/公开课
- FFmpeg深入分析之零-基础
- 食物链(poj1182)