popStar手机游戏机机对战程序
DFS算,五分钟如果答案没有更新,那个解一般来说就很优了。
#include <cstdio>
#include <iostream>
#include <string.h>
#include <cstdlib>
#include <algorithm>
#include <queue>
#include <vector>
#include <cmath>
#include <map>
#include <stack>
using namespace std;
int const uu[4] = {1,-1,0,0};
int const vv[4] = {0,0,1,-1};
typedef long long ll;
int const inf = 0x3f3f3f3f;
ll const INF = 0x7fffffffffffffffll;
double eps = 1e-10;
double pi = acos(-1.0);
#define rep(i,s,n) for(int i=(s);i<=(n);++i)
#define rep2(i,s,n) for(int i=(s);i>=(n);--i)
#define mem(v,n) memset(v,(n),sizeof(v))
#define lson l, m, rt<<1
#define rson m+1, r, rt<<1|1
struct node{
int x,y;
}tempAns[205],Ans[205]; char FIRST[101][101];
bool VIS[101][101];
int bestScore;
int STEP; bool check(char mp[101][101],int x,int y){
rep(k,0,3){
int xx=x+uu[k], yy=y+vv[k];
if(xx>=1&&xx<=100 && yy>=1&&yy<=100 && mp[xx][yy]==mp[x][y]) return true;
}
return false;
}
int color1(char mp[101][101],bool vis[101][101],int x,int y){
vis[x][y]=true;
int res=1;
rep(k,0,3){
int xx=x+uu[k], yy=y+vv[k];
if(xx>=1&&xx<=100 && yy>=1&&yy<=100 && vis[xx][yy]==false && mp[xx][yy]==mp[x][y]) res+=color1(mp,vis,xx,yy);
}
mp[x][y]=0;
return res;
}
void proc1(char mp[101][101]){
rep(j,1,10) rep2(i,9,1){
int g=i,h=j;
while(g+1<=10 && mp[g+1][h]==0) ++g;
mp[g][h]=mp[i][j];
if(g!=i) mp[i][j]=0;
}
rep(j,2,10){
if(mp[10][j]==0) continue;
int k;
for(k=j-1;k>=1;--k) if(mp[10][k]!=0) break;
if(k+1<j){
rep(i,1,10){
mp[i][k+1]=mp[i][j];
mp[i][j]=0;
}
}
}
} void print(){
char ms[101][101];
bool vs[101][101]; mem(vs,false);
rep(i,1,10) rep(j,1,10) ms[i][j]=FIRST[i][j];
rep(i,1,10){
rep(j,1,10)
if(Ans[1].x==i&&Ans[1].y==j)
printf("#");
else{
if(ms[i][j]==0)
printf(" ");
else
printf("%d",ms[i][j]);
}
cout<<endl;
}
rep(i,1,STEP){
printf("step%d = (%d,%d)\n",i,Ans[i].x,Ans[i].y); cout<<endl<<endl;
color1(ms,vs,Ans[i].x,Ans[i].y);
proc1(ms);
if(i!=STEP){
rep(k,1,10){
rep(j,1,10)
if(Ans[i+1].x==k&&Ans[i+1].y==j)
printf("#");
else{
if(ms[k][j]==0)
printf(" ");
else
printf("%d",ms[k][j]);
}
cout<<endl;
}
}
}
} //mp[][]:current state step:current step score:current score
void dfs(char mp[101][101],bool vis[101][101],int tx,int ty,int step,int score){
//printf("step=%d score=%d click on (%d,%d) of last image.\n",step,score,tx,ty);
/*rep(i,1,10){
rep(j,1,10) if(mp[i][j]!=0) printf("%d ",mp[i][j]); else printf(" ");
cout<<endl;
}*/
tempAns[step].x=tx;
tempAns[step].y=ty;
rep(i,1,10) rep(j,1,10){
if(mp[i][j]==0) continue; //这个位置是空的,跳过
if(vis[i][j]) continue; //计算过,跳过
if(check(mp,i,j)==false){ //点击这个位置没法消去块
vis[i][j]=true;
continue;
}
char temp_mp[101][101];
bool temp_vis[101][101]; mem(temp_vis,false);
rep(i1,1,10) rep(j1,1,10) temp_mp[i1][j1]=mp[i1][j1];
int ts=color1(temp_mp,vis,i,j);
proc1(temp_mp);
dfs(temp_mp,temp_vis,i,j,step+1,score+5*ts*ts);
}
if(score>bestScore){
STEP=step;
rep(i,0,step) Ans[i]=tempAns[i];
bestScore=score;
cout<<"bestScore = "<<bestScore<<endl;
//print();
rep(i,1,step) printf("step%d = (%d,%d)\n",i,Ans[i].x,Ans[i].y); cout<<endl<<endl;
}
} void read(){
rep(i,0,10) rep(j,0,10) FIRST[i][j]=-1;
freopen("c:\\hello.in","r",stdin);
rep(i,1,10) rep(j,1,10) scanf("%d",&FIRST[i][j]);
fclose(stdin);
}
void init(){
bestScore=0;
mem(VIS,false);
}
int main(){
read();
init();
dfs(FIRST,VIS,-1,-1,0,0);
}
popStar手机游戏机机对战程序的更多相关文章
- unity手机游戏应用程序调试控制台Lunar Mobile Console - PRO 1.5.5
unity手机游戏应用程序调试控制台Lunar Mobile Console - PRO 1.5.5 High-performance Unity iOS/Android console built ...
- 手机游戏渠道SDK接入工具项目分享(二)万事开头难
一般接到任务后程序员们通常都开始着手进行技术调研了,但我这活是项目负责人.还有一大堆事情要先期准备,没人能帮忙. 一.人力配置 考虑的之前已经有一波人搞了大半年,但没有起色,先期也没有太大人力需求,所 ...
- Unity3D游戏开发初探—1.跨平台的游戏引擎让.NET程序员新生
一.Unity3D平台简介 Unity是由Unity Technologies开发的一个让轻松创建诸如三维视频游戏.建筑可视化.实时三维动画等类型互动内容的多平台的综合型游戏开发工具,是一个全面整合的 ...
- 转:探秘腾讯Android手机游戏平台之不安装游戏APK直接启动法
前言 相信这样一个问题,大家都不会陌生, “有什么的方法可以使Android的程序APK不用安装,而能够直接启动”. 发现最后的结局都是不能实现这个美好的愿望,而腾讯Android手机游戏平台却又能实 ...
- 探秘腾讯Android手机游戏平台之不安装游戏APK直接启动法
前言相信这样一个问题,大家都不会陌生,“有什么的方法可以使Android的程序APK不用安装,而能够直接启动”.发现最后的结局都是不能实现这个美好的愿望,而腾讯Android手机游戏平台却又能实现这个 ...
- android手机游戏开发Cocos2d-x开发分享
我想现在应该没有人没有玩过手机游戏了吧,当然所有人都玩过,但不是所有人都知道怎么去开发手机游戏,因为许多人都感觉做开发是一件很困难的事儿,身边的朋友也对此感觉难度很大.但是,现在我可以告诉你,手机游戏 ...
- 斗牛app上架应用宝、牛牛手机游戏推广、百人牛牛app应用开发、棋牌游戏上传、手游APP优化
联系QQ:305-710439斗牛app上架应用宝.牛牛手机游戏推广.百人牛牛app应用开发.棋牌游戏上传.手游APP优化 iOS开发iPhone/iPad平台安卓手机软件开发机型覆盖范围 超过113 ...
- 创新手机游戏《3L》开发点滴(3)——道具、物品、装备表设计 V2(最终版)
我们正在开发一款新手游,里面有道具,之前也写了一篇博文记录了下我们的设计思路,但是国庆到了,于是我有了时间继续纠结这个问题. 其实我主要是在到底是用mysql还是mongodb上纠结.这个复杂.痛苦. ...
- Unity3D手机游戏开发
<Unity3D手机游戏开发> 基本信息 作者: 金玺曾 出版社:清华大学出版社 ISBN:9787302325550 上架时间:2013-8-7 出版日期:2013 年8月 开本:16开 ...
随机推荐
- AS插件快速生成javabean
https://blog.csdn.net/u010227042/article/details/103803198
- ❤️【Android精进之路-01】定计划,重行动来学Android吧❤️
您好,我是码农飞哥,感谢您阅读本文,欢迎一键三连哦. Android精进之路第一篇,确定安卓学习计划. 干货满满,建议收藏,需要用到时常看看.小伙伴们如有问题及需要,欢迎踊跃留言哦~ ~ ~. 前言 ...
- 简单了解Phar代码打包工具的使用
简单了解Phar代码打包工具的使用 Phar 是在 PHP5 之后提供的一种类似于将代码打包的工具.本质上是想依照 Java 的 Jar 文件那种形式的代码包,不过本身由于 PHP 是不编译的,所以这 ...
- supermvc介绍
马上要开始写毕设了,需要一个合适的框架.想想自己用过的几个框框speedphp tp啊 还有公司的 dagger啊 ,大同小易.每一种都有自己喜欢的地方.然后想到了二八理论,我们常用的功能可能不到框架 ...
- springboot 运行出现错误 Unable to start ServletWebServerApplicationContext due to missing ServletWebServerFactory bean.
原因是我将springboot启动类换到了另外一个方法中 出现了一个异常 后来发现因为我换了类但是忘记了换类名所以才报错 @ComponentScan @EnableAutoConfiguration ...
- SPA测试
1.生产端:环境准备为了进行SPA测试,在生产数据库中创建了SPA测试专用用户,避免与其他用户相互混淆与可能产生的误操作. CREATE USER SPA IDENTIFIED BY SPA DEFA ...
- 数据库InnoDB和MyISAMYSQL的区别
1.nnoDB支持事务,MyISAM不支持,这一点是非常之重要.事务是一种高级的处理方式,如在一些列增删改中只要哪个出错还可以回滚还原,而MyISAM就不可以了. 2.MyISAM适合查询以及插入为主 ...
- List接口常用实现类对比
相同点 都实现了List接口 储存了有序 可重复的数据 不同点 ArrayList 线程不安全 但是效率高 底层使用 Object[] elementData 实现 LinkedList 底层使用双向 ...
- 接口自动化-Python3+request上传文件,发送multipart/form-data编码
1.安装requests_toolbelt pip install requests-toolbelt 2.发送文件中的数据 from requests_toolbelt import Multi ...
- 【转载】[经验] 嵌入式stm32实用的排序算法 - 交换排序
Ⅰ.写在前面 前面写了关于ADC采集电压的文章,大家除了求平均的方式来处理采样值,还有没有使用到其他的方式来处理采集值呢? 在某些情况下就需要对一组数据进行排序,并提取头特定的数据出来使用. 排序的应 ...