题目大意:

4399上面的一个小游戏,突然想能不能用程序得到最优解。网址在这里大家可以去试着玩一玩:http://www.4399.com/flash/6356_2.htm

代码:

#include<iostream>
#include<math.h>
#include<stdio.h>
#include<string.h>
#include<queue>
#define maxn 10000000
using namespace std;int map[10][10]={0};
//int x[10000],y[100000];
int n=0;
int last[maxn];//last[i]表示操作i的上一个操作的标号
int move[maxn][2];//操作i的+1位置。
struct node
{int map[8][8];int x,y,n;int num;
};
queue<node>a;
node q,p;bool empty(node x)
{for(int i=1;i<=6;i++){for(int j=1;j<=6;j++){if(x.map[i][j]!=0)return 0;}}return 1;
}
void output(node x)
{for(int i=1;i<=6;i++){for(int j=1;j<=6;j++){printf("%d ",x.map[i][j]);}printf("\n");}printf("\n");
}void boom(int x,int y)
{//cout<<x<<y<<endl;p.map[x][y]=0;int lx,ly;lx=x;ly=y;lx=x-1;while(1){lx++;if(lx>6)break;if(p.map[lx][ly]!=0){p.map[lx][ly]++;//cout<<p.map[lx][ly]<<endl;if(p.map[lx][ly]==5){boom(lx,ly);}break;}}lx=x+1;while(1){lx--;if(lx<1)break;if(p.map[lx][ly]!=0){p.map[lx][ly]++;if(p.map[lx][ly]==5){//cout<<"("<<lx<<","<<ly<<")"<<endl;boom(lx,ly);}break; }}lx=x;ly=y-1;while(1){ly++;if(ly>6)break;if(p.map[lx][ly]!=0){p.map[lx][ly]++;if(p.map[lx][ly]==5){boom(lx,ly);}break;}}ly=y+1;while(1){ly--;if(ly<1)break;if(p.map[lx][ly]!=0){p.map[lx][ly]++;if(p.map[lx][ly]==5){boom(lx,ly);}break;}   }
}void add(int x,int y)//p在点(x,y)加一个
{p.map[x][y]++;p.n++;if(p.map[x][y]==5){boom(x,y);}
}void findway(int t)
{while(t!=0){cout<<move[t][0]<<" "<<move[t][1]<<endl;t=last[t];}
}void ceshi()
{for(int i=1;i<=6;i++){for(int j=1;j<=6;j++){cin>>p.map[i][j];}}cin>>n;while(n--){int lx,ly;cin>>lx>>ly;add(lx,ly);for(int i=1;i<=6;i++){for(int j=1;j<=6;j++){cout<<p.map[i][j]<<" ";}cout<<endl;}cout<<endl;}
}
int main()
{int flag=0;//ceshi();while(1){flag=0;n=0;for(int i=1;i<=6;i++){for(int j=1;j<=6;j++){cin>>map[i][j];if(map[i][j]!=0)n++;}}for(int i=1;i<=6;i++){for(int j=1;j<=6;j++){q.map[i][j]=map[i][j];}}q.num=0;q.n=0;a.push(q);while(!a.empty()){for(int i=1;i<=6;i++){for(int j=1;j<=6;j++){if(a.front().map[i][j]==0)continue;q=a.front();p=q;add(i,j);//给q这个状态在(i,j)点上+1q=p;//output(q);cout<<q.n<<endl;q.num=n;last[n]=a.front().num;move[n][0]=i;move[n][1]=j;n++;a.push(q);if(empty(q)){flag=1;break;}}if(flag==1)break;}if(flag==1){cout<<q.n<<endl;findway(n-1);break;}a.pop();}}
}

几组测试样例:

输入:
3 0 0 0 4 0
0 0 0 0 4 0
0 0 0 0 0 0
0 0 4 0 1 0
0 0 0 0 0 0
0 0 0 0 0 0
输出:
4
1 1
2 5
4 3
4 5

输入:
3 0 1 2 0 3
4 1 0 3 1 2
2 2 2 4 3 3
0 4 3 3 2 3
2 0 1 0 3 4
2 1 4 3 2 1
4
1 6
2 4
4 3
3 4


实际游戏出现情况:
第一关:
3 3 1 1 3 2
2 0 3 0 3 3
4 4 2 2 3 3
0 0 4 3 0 4
4 2 0 1 2 3
1 2 2 2 2 1

第二关:
2 2 2 4 1 3
0 3 4 2 4 1
3 1 3 3 0 3
3 2 3 2 0 0
4 3 4 0 1 3
2 0 4 0 2 2

第三关:(程序出错)
1 2 3 0 2 4
4 0 2 2 2 3
0 0 3 2 4 1
4 0 0 2 3 0
3 3 0 3 0 4
0 3 3 2 2 1


第一关: (出错)
3 1 2 1 1 2
1 1 4 3 4 4
2 0 3 0 2 2
1 4 2 4 0 3
3 3 1 1 3 2
2 2 0 3 0 0
本样例,手动将(4,2)+1后,跑出来是4次,一共五次
将maxn变为1e7后成功跑出,原来是内存不够。

第二关:还是跑不出来
2 0 4 2 4 3
0 1 1 2 2 4
3 2 1 1 3 3
2 3 0 0 1 3
2 3 0 3 3 2
3 4 4 4 0 0
我就吧maxn变成1e8了,然后电脑就蓝屏了,大概是爆内存了。

根据以上程序及样例数据,大概能加5滴水是极限,再继续跑内存就存不下数据了,而且就该太慢了。有时间要先办法重新优化一下。不过确实神奇,有的样例在把前三个点下去的时候都还没什么变化,直到点下最后一个,然后瞬间爆炸全清,这个爽啊~

优化思路:

1.存图方面,因为可能存的值只有0-5,所以想办法用位运算优化。
2.搜索结点访问方面,先办法在减少一些访问,比如一个1的点,要加4滴水,这四滴水都可以给周围4个点每个点都加一遍了,当然这并不能说明给这个1点的加就一定不会是最优,具体优化方法还有仔细证明。
3.保存路径方面也是有同样的所占内存太大的问题。
注:上面程序输出的加水位置是倒序输出的。

目标:100关!

未完待续。。。。

4399小游戏 十滴水 求解器(输出路径的bfs)相关推荐

  1. Python爬虫入门(四):实战,爬取4399小游戏首页

    目录 robots.txt robots协议 robots.txt 语法 君子协定 何时需要robots协议? 查看4399.com的robots.txt 设定并分析目标 代码 urllib2& ...

  2. SEO案例:4399小游戏网站SEO案例剖析

    在小游戏行业,有一个网站的SEO做的相称厉害,那就是4399小游戏,当然17173小游戏要做的不错的,但是绝对于4399来说,其SEO可能要略逊一筹.下面做一个简单地对比你就明白了. 两个网站的百度收 ...

  3. 怎么把4399小游戏的代码_25行代码带你爬取4399小游戏数据,看下童年的游戏是否还在...

    前言 本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,如有问题请及时联系我们以作处理. 还记得童年的网页小游戏吗?今天带大家爬取4399小游戏网站的数据,游戏名字+链接地址 目标网 ...

  4. 4399小游戏flash插件怎么下载_Flash即将关闭,但这个小游戏平台,或许可以帮你找回4399的回忆...

    今年注定是与众不同的一年,TCL和黑莓停止了合作关系.Windows 7失去了微软官方技术支持,而我们也将送走一位真正意义上的互联网老玩家-Flash. 在2017年Adobe就曾宣布,将于2020年 ...

  5. 计算机里没有四款小游戏,90后最爱玩的4款“4399”小游戏,一个都没玩过的太可怜!...

    原标题:90后最爱玩的4款"4399"小游戏,一个都没玩过的太可怜! 对于90后的小伙伴们来说,现在的很多东西都属于童年的回忆了,而在我们那个年代,电脑游戏还不是非常的盛行.正式流 ...

  6. 4399小游戏—宠物连连看经典版2—游戏辅助脚本

    引言 期末的时候看到一篇博客,写的宠物连连看的辅助脚本,感觉很有意思,就自己跟着博客自己实现了一遍,开发过程中遇到了一些问题,也体会到了解决问题的乐趣,遂在此记录一下. 先放一下博客的链接:https ...

  7. 一分钟教你如何使用edge浏览器玩4399小游戏

    大家都知道flash自从在主流浏览器中退出舞台后,很多支持flash的小游戏网站都无法正常游玩了.这里教大家一种在edge浏览器中玩flash游戏的方式,十分便捷. 1.首先在浏览器中输入https: ...

  8. 25行代码带你爬取4399小游戏数据,看下童年的游戏是否还在

    前言 本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,如有问题请及时联系我们以作处理. 还记得童年的网页小游戏吗?今天带大家爬取4399小游戏网站的数据,游戏名字+链接地址 目标网 ...

  9. 4399小游戏童年的乐趣,python爬取4399全站小游戏

    大家好,我是辣条. 前言 2021年已到尾巴尖尖了. 今天照镜子,看着镜子中的自己,发现还是跟年轻时一样的"帅",看到头部的时候又发现相比半个月之前的发际线,它好像又往上移了一点点 ...

  10. 记录一次用 Vue 简单完成小游戏:十滴水 (无动画)

    记录一次用 Vue 简单完成小游戏:十滴水(无动画) 前言 1.游戏规则 2.开发思路 1.地图设计 2.子弹发射事件 3.水滴状态 4.水滴溅射 5.获胜条件 3.源码 3.1 Template 部 ...

最新文章

  1. python22期自动化-Day2
  2. Error parsing HTTP request header Note: further occurrences of HTTP header parsing errors
  3. 回溯算法之幸运的袋子
  4. LinkButton中添加删除确认框
  5. opencv出错:error: (-213:The function/feature is not implemented) Unknown/unsupported array type
  6. [渝粤教育] 郑州工程技术学院 食品微生物学 参考 资料
  7. QT 自定义带图片背景半透明阴影窗口
  8. 苹果iOS系统下的推送机制及实现
  9. Hebutgo 7.21 git使用(alicode)
  10. MySQL8.0.27版本于2021年10月19日正式GA和新功能介绍
  11. Hibernate之两种一对一关系映射方式
  12. 中国互联网乃至移动互联网发展最好的十个城市排名,我会这么排:北京,深圳,上海,杭州,广州,成都,武汉,南京,西安,厦门。
  13. winRaR 命令行实现自解压可执行程序
  14. GKCTF(MISCCRYPTO部分)(未完待续。。)
  15. MySQL连接错误(2013, “Lost connection to MySQL server at ‘handshake)
  16. 2017CCPC秦皇岛站总结
  17. Supershell 一款牛叉闪闪的工具
  18. 论文复现——Libra R-CNN: Towards Balanced Learning for Object Detection
  19. TCP-面向连接的传输层协议
  20. 【转】八个基本的 Docker 容器管理命令

热门文章

  1. python xpath定位 麦客表单
  2. 关于校园流浪猫狗的调查报告 新生研讨课校内调查
  3. pyqt获得鼠标_PyQt5编程:鼠标事件
  4. 【codeforces 417D】Cunning Gena
  5. 安卓使用sqlite
  6. R包安装--以4.1.2安装DMwR为例
  7. 张驰课堂:六西格玛中的Minitab软件,到底有多重要
  8. C语言取得int的位数
  9. 2021年中国工业互联网安全大赛
  10. Git Pull Failed:You have not concluded your merge.Exiting because of unfinished merge