HDU 1045 Fire Net
来源:互联网 发布:网络无法登陆暴雪 编辑:程序博客网 时间:2024/06/07 05:49
题目链接:戳这里
题目大意:在一个矩阵(最大4*4)中放置大炮,有障碍的地方不能放,且大炮之间不能被打到(大炮只能向上下左右四个方向发射),当然,障碍物可以阻隔大炮。
分析:很明显这是一道搜索题,刚开始想着跟八皇后类似,就联想标记,但是怎样判断与它同行同列是否有大炮,有大炮的话是否有障碍物阻隔呢。最后看了别人的博客,发现了更好的办法,依次对每一个点深搜,只需要判断这个点向上和向左有没有大炮或障碍。
源码 :
#include<iostream>#include<stdio.h>#include<string>#include<string.h>#include<cstring>#include<stack>#include<queue>#include<algorithm>#include<math.h>#include<vector>#include<iomanip>#include<map>#include<list>using namespace std;char mp[5][5];int n,ans;bool judge(int k){int x=k/n,y=k%n;for(int i=x;i>=0;i--){//向上查找if(mp[i][y]=='X')break;if(mp[i][y]=='@')return 0;}for(int i=y;i>=0;i--){//向左查找if(mp[x][i]=='X')break;if(mp[x][i]=='@')return 0;}return 1;}void DFS(int k,int cnt){//k表示点的序号 if(k==n*n){if(ans<cnt)ans=cnt;return;}if(mp[k/n][k%n]=='.'&&judge(k)){mp[k/n][k%n]='@';//标记DFS(k+1,cnt+1);mp[k/n][k%n]='.';//撤销}DFS(k+1,cnt);}int main(){ while(cin>>n,n) { for(int i=0;i<n;i++) cin>>mp[i];ans=0; DFS(0,0);cout<<ans<<endl; }return 0;}
0 0
- hdu 1045 Fire Net
- HDU 1045 Fire Net
- HDU 1045 Fire Net
- Hdu 1045 Fire Net
- HDU 1045 Fire Net
- hdu 1045 Fire Net
- HDU-1045-Fire Net
- hdu 1045 Fire Net
- hdu 1045 Fire Net
- HDU 1045 Fire Net
- hdu 1045 Fire Net
- HDU-1045 Fire Net
- HDU:1045 Fire Net
- HDU 1045 Fire Net
- HDU 1045 Fire Net
- hdu 1045 Fire Net
- hdu 1045 Fire Net
- hdu 1045 Fire Net
- 第76篇 一对多之稳定性研究及windows下部署官网音频最新到本地及array_uintersect_assoc 周五
- opencv最小二乘拟合平面
- 转载---JS页面跳转方法
- vue初探--路由简单使用
- 栈与堆的区别
- HDU 1045 Fire Net
- MySQL开启慢查询日志
- RAM or ROM
- Android技术网站
- 深度学习 10. cifar-10 介绍
- 调试和开发MTK源码
- odoo——Building Interface Extensions
- Qt实现读取显示obj文件——创建并绑定纹理
- android图片涂鸦——旋转与文字功能的实现原理