博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[POJ]1164 The Castle
阅读量:6901 次
发布时间:2019-06-27

本文共 2989 字,大约阅读时间需要 9 分钟。

//markdown复制进来一堆问题 还是链接方便点

首先想到用9个方格来表示一个房间,如此一来复杂许多,MLE代码如下:

//Writer:GhostCai && His Yellow Duck#include
#define MAXN 50using namespace std;int m,n;int a[MAXN][MAXN];bool vis[MAXN][MAXN];void opet(int num,int x,int y){ bool up=0,dn=0,lf=0,rt=0;//!!! if(num>=8){ dn=1; num-=8; } if(num>=4){ rt=1; num-=4; } if(num>=2){ up=1; num-=2; } if(num>=1){ lf=1; } a[x*2][y*2]=2; if(up) a[x*2-1][y*2]=1,a[x*2-1][y*2+1]=1,a[x*2-1][y*2-1]=1; if(dn) a[x*2+1][y*2]=1,a[x*2+1][y*2+1]=1,a[x*2+1][y*2-1]=1; if(lf) a[x*2][y*2-1]=1,a[x*2+1][y*2-1]=1,a[x*2-1][y*2-1]=1; if(rt) a[x*2][y*2+1]=1,a[x*2+1][y*2+1]=1,a[x*2-1][y*2+1]=1; }void dfs(int x,int y){ if(vis[x][y]) return; if(x<1||x>m*2+1||y<1||y>n*2+1) return; if(a[x][y]==1) return; if(a[x][y]!=0) vis[x][y]=1;//!! if(a[x][y]==2) a[x][y]=-1; dfs(x+1,y); dfs(x-1,y); dfs(x,y+1); dfs(x,y-1);} int calc(){ int cnt=0; for(register int i=1;i<=m*2+1;i++){ for(register int j=1;j<=n*2+1;j++){ if(a[i][j]==-1){ cnt++; a[i][j]=2; } } } return cnt;}int main(){ cin>>m>>n; int i,j; int r; for(i=1;i<=m;i++){ for(j=1;j<=n;j++){ cin>>r; opet(r,i,j); } } int ans=0,mx=0,cnt=0; for(i=1;i<=m*2+1;i++) a[i][1]=1,a[i][n*2+1]=1; for(i=1;i<=n*2+1;i++) a[1][i]=1,a[m*2+1][i]=1;// for(i=1;i<=m*2+1;i++){
// for(j=1;j<=n*2+1;j++){
// cout<
<<" ";// }// cout<

百般无奈下,重新思路。

想到其实没必要用9个方格,一个就挺好。
只不过在搜索的时候,利用数字判断一下这个方向走不走。

注意的一点是局部变量要赋初值,dfs里四个布尔位置变量一开始没有赋初值,导致奇怪的结果。

还是很像swim,嗯。

//Writer:GhostCai && His Yellow Duck#include
#define MAXN 200 using namespace std;int m,n;int a[MAXN][MAXN];bool vis[MAXN][MAXN];void dfs(int x,int y){ if(vis[x][y]) return; if(x<1||x>m||y<1||y>n) return; int d=a[x][y]; vis[x][y]=1;//!! a[x][y]+=666; bool lf=0,rt=0,up=0,dn=0;//!!! if(d>=8){ d-=8; dn=1; } if(d>=4){ d-=4; rt=1; } if(d>=2){ up=1; d-=2; } if(d>=1){ lf=1; } if(!lf) dfs(x,y-1); if(!rt) dfs(x,y+1); if(!dn) dfs(x+1,y); if(!up) dfs(x-1,y);} int calc(){ int cnt=0; for(register int i=1;i<=m;i++){ for(register int j=1;j<=n;j++){ if(a[i][j]>16){ cnt++; a[i][j]-=666; } } } return cnt;}int main(){ int ans=0,mx=0,cnt=0; cin>>m>>n; int i,j; for(i=1;i<=m;i++){ for(j=1;j<=n;j++){ cin>>a[i][j]; } } for(i=1;i<=m;i++){ for(j=1;j<=n;j++){ if(!vis[i][j]){ dfs(i,j); cnt++; ans=calc(); mx=max(mx,ans); } } } cout<
<
<
<

转载于:https://www.cnblogs.com/ghostcai/p/9247545.html

你可能感兴趣的文章
flash 支持的html 标签
查看>>
python连接redis sentinel集群(哨兵模式)
查看>>
java学习_文件工具类
查看>>
SQL语句学习
查看>>
用B表更新A表
查看>>
Adobe Dreamweaver CS5 adobe acrobat x pro 序列号
查看>>
MySQL索引优化
查看>>
Ubuntu中useradd和adduser的区别
查看>>
@字王2012·龙爪体系列,共58款
查看>>
vscode开发c#
查看>>
Html5移动端页面自适应布局详解(rem布局)
查看>>
collections模块
查看>>
2018-2019-1 20165302 《信息安全系统设计基础》第六周学习总结
查看>>
黑马程序员--浅谈进程与线程
查看>>
ROS-十步完成ROS-indigo安装
查看>>
WinDbg双机调试配置
查看>>
.net断点续传的原理
查看>>
仿微博php生成短网址
查看>>
前端开发必备站点汇总
查看>>
SQL语句熟悉
查看>>