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开 ...
 
随机推荐
- django url配置-反向解析-视图函数-HttpRequest对象-HttpResponse对象-cookies-session-redis缓存session
			
""" --视图概述:-- 作用:视图接受WEB请求,并响应WEB请求 本质:视图就是一个python中的函数 响应: 1.网页: 一.重定向 二.错误视图 400,50 ...
 - 鸿蒙内核源码分析(调度队列篇) | 内核有多少个调度队列 | 百篇博客分析OpenHarmony源码 | v6.05
			
百篇博客系列篇.本篇为: v06.xx 鸿蒙内核源码分析(调度队列篇) | 内核有多少个调度队列 | 51.c.h .o 任务管理相关篇为: v03.xx 鸿蒙内核源码分析(时钟任务篇) | 触发调度 ...
 - Decorator装饰器模式个人理解
			
对于装饰器模式,其主要是为了:在不改变本体特征的情况下,对其进行包装.装饰,目的是为了补充.扩展.增强其功能. 有三个原则: 不能改变本体的特征 要对本体的功能进行扩展 装饰器脱离了本体则没有任何含义 ...
 - Oracle部署迁移手册
			
第1章 安装准备 1.1 安装环境 操作系统:Redhat6.5 x64 32核CPU 62G内存 系统盘300G 数据磁盘3T Oracle软件:Oracle Database 11g Enterp ...
 - Docker入门系列之五:15个 Docker 命令
			
在这篇文章中,我们将学习15个Dockers CLI命令.如果你还不了解Docker,请查看这个系列的其他部分进行学习,Docker概念,生态系统,Dockerfile,Docker镜像. Docke ...
 - farOs 介绍
			
nGame nGame 一款文字游戏服务端框架;用于快速构建:自由探索.武侠.修真.模拟,回合制,剧本杀.动态语言小说.等服务器 如果你有期望实现的功能请加Q群 ngame计划 完善框架功能 farO ...
 - 【理解OS】1.保护模式概述
			
这个系列文章主要目的是为了记录我个人学习保护模式后的总结与一点点的思考.我也是一个学习者,其中由错误在所难免,若各位朋友指出将不胜感激. 1. Intel CPU的运行模式概述 这里我将粗略介绍Int ...
 - 把之前CompletableFuture留下的坑给填上。
			
你好呀,我是歪歪. 填个坑吧,把之前一直欠着的 CompletableFuture 给写了,因为后台已经收到过好几次催更的留言了. 这玩意我在之前写的这篇文章中提到过:<面试官问我知不知道异步编 ...
 - 从源码分析node-gyp指定node库文件下载地址
			
当我们安装node的C/C++原生模块时,涉及到使用node-gyp对C/C++原生模块的编译工作(configure.build).这个过程,需要nodejs的头文件以及静态库参与(后续称库文件)对 ...
 - 高德 Serverless 平台建设及实践
			
作者 | 邓学祥(祥翼) 来源 | Serverless 公众号 高德从 FY21 财年开始启动 Serverless 建设,至今一年了,高德 Serverless 业务的峰值超过十万 qps 量级, ...