hdu 1045 Fire Net
来源:互联网 发布:linux 自动脚本 编辑:程序博客网 时间:2024/05/31 18:37
刚开始是听说这题是贪心题, 我贪了一会儿也没贪出来一个因为所以。
发现搜索可以就用深搜打一遍,深搜里面的i,j 因为是全局变量,,我错的一脸懵逼,改了好大一会才发现,,,,
下面是搜索代码
#include<stdio.h>#include<iostream>#include<algorithm>using namespace std;char map[5][5];int v[5][5],n,maxx,i,j;bool judge(int x,int y){ for(int xx=x;xx<=n;xx++){ if(map[xx][y]=='X') break; if(v[xx][y]) return false; }for(int xx=x;xx>0;xx--){ if(map[xx][y]=='X') break; if(v[xx][y]) return false; }for(int yy=y;yy<=n;yy++){ if(map[x][yy]=='X') break; if(v[x][yy]) return false; }for(int yy=y;yy>0;yy--){ if(map[x][yy]=='X') break; if(v[x][yy]) return false; } return true;}void dfs(int s){if(s>maxx) maxx=s; for(int i=1;i<=n;i++){ for(int j=1;j<=n;j++){ if(!v[i][j]&&map[i][j]!='X'&&judge(i,j)){//printf("%d\n",judge()); v[i][j]=1; dfs(s+1); v[i][j]=0;//for(int q=1;q<=n;q++){for(int w=1;w<=n;w++) printf("%d ",v[q][w]);printf("\n");}printf("\n"); //printf("%d %d %d\n",v[i][j],i,j); } } }}int main(){ while(~scanf("%d",&n)&&n){ maxx=0; for(i=1;i<=n;i++){ getchar(); for(j=1;j<=n;j++){ scanf("%c",&map[i][j]); v[i][j]=0; } } dfs(0); printf("%d\n",maxx); } return 0;}A后,百度了一下别人怎么贪得,,,发现我之前的思路大致是对了,要是反复再推敲推敲可能就过了,,
下面是别人的贪心代码
#include<iostream>#include<cstdio>#include<cstring>using namespace std;int q[9][9]; //保存可影响的格子数char map[9][9];int main(){ int m,n,i,j,k,s; while(cin>>n&&n) { s=0; memset(q,0,sizeof(q)); for(i=1; i<=n; i++) for(j=1; j<=n; j++) { cin>>map[i][j]; } for(i=1; i<=n; i++) //将每个非墙位置初始化 for(j=1; j<=n; j++) { if(map[i][j]=='.') { q[i][j]++; for(k=i-1; k>=1&&map[k][j]=='.'; k--) q[k][j]++; for(k=i+1; k<=n&&map[k][j]=='.'; k++) q[k][j]++; for(k=j-1; k>=1&&map[i][k]=='.'; k--) q[i][k]++; for(k=1+j; k<=n&&map[i][k]=='.'; k++) q[i][k]++; } } int min1; int x,y; for(i=1; i<=n; i++) { min1=8; for(j=1; j<=n; j++) { if(map[i][j]=='.'&&q[i][j]<min1) //每次都选这行影响格子数最小的地方建立炮台 { min1=q[i][j]; x=i; y=j; } } if(min1!=8) //受影响地方标记 { s++; for(k=x-1; k>=1&&map[k][y]=='.'; k--) q[k][y]=8; for(k=x+1; k<=n&&map[k][y]=='.'; k++) q[k][y]=8; for(k=y-1; k>=1&&map[x][k]=='.'; k--) q[x][k]=8; for(k=1+y; k<=n&&map[x][k]=='.'; k++) q[x][k]=8; q[x][y]=8; i--; //防漏 } } cout<<s<<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
- 阅读STM32F107的lwip移植后的一个项目工程
- 完全同态加密算法
- matlab打包dll
- 工作踩得坑之四简单的日志记录
- centOS 配置IPsecVPN手记--strongswan
- hdu 1045 Fire Net
- SuperSlide、TouchSlide 解决网站大部分特效展示问题
- 微信支付服务商模式(受理机构模式)开发注意事项,jsapi支付
- JavaScript 数组方法实现
- git 如何push本地文件到gitlab远程仓库
- [awk]awk 与 shell的参数传递(双向)
- mac上配置maven
- SPS PPS NALU
- OLAP、OLTP的介绍和比较