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开 ...
随机推荐
- CentOS7搭建sftp
openssh-server自带sftp服务 1.添加组: groupadd sftp 2.添加不可登录的sftp用户 useradd -u 1001 -g sftp -s /sbin/no ...
- TS基础笔记
TS优势 更好的错误的提示,开发中及时发现问题:编辑器语法提示更完善:类型声明可以看出数据结构的语义,可读性更好; TS环境搭建 1.安装node;2.npm install typescript@3 ...
- 我们也有自带的缓存系统:PHP的APCu扩展
想必大家都使用过 memcached 或者 redis 这类的缓存系统来做日常的缓存,或者用来抗流量,或者用来保存一些常用的热点数据,其实在小项目中,PHP 也已经为我们准备好了一套简单的缓存系统,完 ...
- PHP中的“重载”是个啥?
很多面试官在面试的时候都会问一些面向对象的问题,面向对象的三大特性中,多态最主要的实现方式就是方法的重载和重写.但是在PHP中,只有重写,并没有完全的重载能力的实现. 重写,子类重写父类方法. // ...
- google插件网页播放mp4代码
<script src="http://html5media.googlecode.com/svn/trunk/src/html5media.min.js"></ ...
- php 的一些问题
------------------------------------------------------------------------------ * 绝对路径转化为相对路径 <?ph ...
- redis被360禁止,设置启动
https://blog.csdn.net/blick__winkel/article/details/77986481 一.下载windows版本的Redis 去官网找了很久,发现原来在官网上可以下 ...
- 真机连接电脑后,adb devices显示为空-解决方案
真机:小米6x,adb版本 真机连接电脑后,在cmd中输入adb devices,显示为空. 原因是真机没开启开发者选项和USB调试. 解决方案: 手机的[设置]-[我的设备]-[全部参数],多次点击 ...
- sunny 内网穿透使用。
启动方法:
- P4022-[CTSC2012]熟悉的文章【广义SAM,dp,单调队列】
正题 题目链接:https://www.luogu.com.cn/problem/P4022 题目大意 给出\(m\)个模板串. 然后\(n\)次询问给出一个串\(S\)要求找到一个最大的\(L\)使 ...