博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
poj 1027 深搜
阅读量:5173 次
发布时间:2019-06-13

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

题意:在一个固定大小为10x15的矩形区域A内被RGB三种颜色的小球填满。

现在按如下步骤操作:

1、 删除区域A内最大的一片区域M(任意颜色都可以,只要其占有区域最大)

2、 删除M后,自然会出现空的位置,在M区域上方的小球自然下落;当删除M后出现空列时,右边的列往左填充。注意是以“列”为单位填充,非空列只能整列往空列移动。移动后,各个小球之间的相对顺序 与 移动前一样。

3、 当区域A剩余小球数为0,或A内的最大区域为1时,游戏结束。

 

 

char b[10][16],c[10][16];int best_i,best_j,best_cnt;int now_i, now_j, now_cnt;int score;void dfs(int i,int j){    if(j
now_i) now_i=i; now_cnt++; b[i][j]='1'; if(i-1>=0&&c[i-1][j]==c[i][j]&&b[i-1][j]=='0') dfs(i-1,j); if(i+1<10&&c[i+1][j]==c[i][j]&&b[i+1][j]=='0') dfs(i+1,j); if(j-1>=0&&c[i][j-1]==c[i][j]&&b[i][j-1]=='0') dfs(i,j-1); if(j+1<15&&c[i][j+1]==c[i][j]&&b[i][j+1]=='0') dfs(i,j+1); }void mark(int i,int j) { //最大区域标记为2 best_cnt++; b[i][j]='2'; if(i-1>=0&&c[i-1][j]==c[i][j]&&b[i-1][j]!='2') mark(i-1,j); if(i+1<10&&c[i+1][j]==c[i][j]&&b[i+1][j]!='2') mark(i+1,j); if(j-1>=0&&c[i][j-1]==c[i][j]&&b[i][j-1]!='2') mark(i,j-1); if(j+1<15&&c[i][j+1]==c[i][j]&&b[i][j+1]!='2') mark(i,j+1); }void init(){ // cout<<" init"<
=0;i--) if(b[i][j]=='0'&&c[i][j]!='x') { now_cnt=0; now_i=i; now_j=j; dfs(i,j); //深搜 if(now_cnt>best_cnt) { best_cnt=now_cnt; best_i=now_i; best_j=now_j; // cout<
<<' '<
<<' '<
<
best_i) best_i=now_i; } }}void move() { // cout<<" move"<
=0;i--) if(b[i][j]=='2') { int m=i,n=j; int num=0; while(m>=0&&b[m][n]=='2') { num++; m--; } for(m=i;m-num>=0;m--) { c[m][n]=c[m-num][n]; b[m][n]=b[m-num][n]; } for(;m>=0;m--) { c[m][n]='x'; b[m][n]='x'; } } for(int j=0;j<15;j++) if(c[9][j]=='x') { int n=j,num=0; while(n<15&&c[9][n]=='x') { num++; n++; } if(n==15) break; for(int i=0;i<10;i++) { for(n=j;n+num<15;n++) { c[i][n]=c[i][n+num]; b[i][n]=b[i][n+num]; } for(;n<15;n++) { c[i][n]='x'; b[i][n]='x'; } } }}void readData() { for(int i=0;i<10;i++) cin>>c[i]; }int main() { int t; cin>>t; for(int r=1;r<=t;r++) { readData(); cout<<"Game "<
<<":"<
<

 

转载于:https://www.cnblogs.com/ts65213/p/3147006.html

你可能感兴趣的文章
idea 配置mybatis Generator 不显示的解决方案 和 配置MBG
查看>>
英语生疏了,每日至少一句吧
查看>>
创建打不开文件夹
查看>>
完成登录功能,用session记住用户名
查看>>
12 for循环
查看>>
redis(hash篇)
查看>>
Scala实战高手****第12课:Scala函数式编程进阶(匿名函数、高阶函数、函数类型推断、Currying)与Spark源码鉴赏...
查看>>
Hibernate一对多关联
查看>>
python 把函数作为参数 ---高阶函数
查看>>
jQuery + ashx 实现图片按比例预览、异步上传及显示
查看>>
android 代码中使用textAppearance
查看>>
【iOS】UITableViewDelegate 方法没有调用
查看>>
解决code::blocks 17.12不能debug的方法
查看>>
bzoj2961&&bzoj4140 共点圆
查看>>
96:经典实例,判断那一条是闰年:
查看>>
upsource初探
查看>>
让SVN自动更新代码注释中的版本号
查看>>
java中base64
查看>>
常用的mysql操作命令
查看>>
Unity3D的菜单及编辑器扩展
查看>>