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(" ");elseprintf("%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(" ");elseprintf("%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);
}

转载于:https://www.cnblogs.com/fish7/p/4068750.html

popStar手机游戏机机对战程序相关推荐

  1. 请问开发手机游戏需要什么软件?

    请问开发手机游戏需要什么软件? 一.总结 一句话总结: 二.请问开发手机游戏需要什么软件? 首先你有编程基础是再好不过的了. 手机游戏开发的平台是JME,一般不会用到C++.当然学过C++的更好. 你 ...

  2. Java手机游戏开发简明教程 (SunJava开发者认证程序员 郎锐)

    原文发布时间为:2008-07-30 -- 来源于本人的百度文章 [由搬家工具导入] Java手机游戏开发实例简明教程 (SunJava开发者认证程序员 郎锐) 一.手机游戏编写基础 1.手机游戏设计 ...

  3. hive时空链战_时空链战Chain Strike游戏电脑版下载_时空链战Chain Strike最新电脑版下载_18183手机游戏下载...

    时空链战Chain Strike电脑版下载拥有丰富的玩法模式任你选择,让你的游戏过程更加的精彩! <时空链战>(Chain Strike)由韩国游戏商Com2uS研发制作,故事讲述了男主角 ...

  4. 小程序源码:游戏助手王者战力查询扫码登录多功能微信小程序

    这是一款游戏多功能助手小程序 内由王者战力查询(支持微信QQ双端查询,安卓IOS) 游戏扫码登录(内支持多种游戏扫码登录) 短视频去水印功能(支持各大平台) 游戏改名助手(支持空白名生成,符号名生成) ...

  5. Java游戏里面的星球大战_星球大战手机游戏-JAVA程序算法

    内容简介: 毕业设计 星球大战手机游戏-JAVA程序算法,共18页,9196字 摘 要 近年来,随着各种不同设备,尤其是移动通信设备的飞速发展诞生了一项新的开发技术-J2ME.它定位在消费性电子产品的 ...

  6. 游戏助手微信小程序源码王者荣耀战力查询,游戏扫码登录器等支持流量主

    这是一款游戏助手小程序源码,UI方面的话还是挺简单,小编个人看着挺舒服的 小程序内支持多种热门游戏扫码登录,也就是说是一个游戏登录器 比如英雄联盟,王者荣耀,和平精英等等热门游戏都支持 另外还有王者战 ...

  7. 小程序源码:游戏助手微信小程序源码王者荣耀战力查询,游戏扫码登录器-多玩法安装简单

    这是一款游戏助手小程序源码,UI方面的话还是挺简单,小编个人看着挺舒服的 小程序内支持多种热门游戏扫码登录,也就是说是一个游戏登录器 比如英雄联盟,王者荣耀,和平精英等等热门游戏都支持 另外还有王者战 ...

  8. 程序员必玩:盘点程序员不容错过的手机游戏

    点击上面 免费订阅本账号! 本公众号主要推送javaweb开发相关技术,基础知识点,同时会深入剖析复杂的问题,分享一些优秀的框架,大型项目经验,当今最流行的Javaweb技术,热点科技新闻,招聘信息, ...

  9. 微信小程序:游戏助手王者战力查询扫码登录多功能小程序源码

    这是一款游戏多功能助手小程序 内由王者战力查询(支持微信QQ双端查询,安卓IOS) 游戏扫码登录(内支持多种游戏扫码登录) 短视频去水印功能(支持各大平台) 游戏改名助手(支持空白名生成,符号名生成) ...

最新文章

  1. SQL server 系统优化--通过执行计划优化索引(1) (转)
  2. Linq 学习笔记(二)
  3. Windows10 下搭建汇编语言开发环境( 利用 DOSBOX 和 MASM32 )
  4. strlen函数实现
  5. 《金领简历》精华 创业公司 面试机会 简历
  6. 关于git push报403的问题
  7. x=min(x, y)
  8. wamp 出现 The requested URL / was not found on this server
  9. 电子计算机教室宣传标语,电子备课室宣传标语有哪些
  10. Web前端工程师修炼之道(原书第4版) 中文pdf扫描版
  11. android 半透明色值_最全的Android 颜色透明度
  12. 电源测试之输出动态响应(Output Dynamic Response Test)
  13. PLC编程指南_变量命名规则介绍
  14. p2p与反p2p的博弈,一劳永逸真的不容易么
  15. php统计邮件打开率,监控 Amazon SES 电子邮件的打开率、点击率和退回率
  16. python颜色填充代码_python中如何给图形填充颜色
  17. UML(系统分析与设计核心总结)+期末考试例题分析
  18. python计算坡度_基于python实现利用DEM数据计算坡度、坡向
  19. 未名湖边的烦恼引起的递归问题探讨
  20. GUC-11 线程池

热门文章

  1. 使用JPA进行Update操作 @Query注解的用法,JPL
  2. C++ 笔记(27)— 指针变量、数组和指针、指针数组、数组指针、指针常量与常量指针
  3. 解决pip安装报错:is not a supported wheel on this platform
  4. 2018 Google kickstart Problem A. Planet Distance
  5. 阿里云Centos 解决挖矿程序:kdevtmpfsi--服务器CPU占用高、内存占用高
  6. Arm Cortex-M23 MCU,Arm Cortex-M33 MCU与RISC-V MCU技术
  7. TVM在ARM GPU上优化移动深度学习
  8. X-Deep Learning功能模块
  9. H265与ffmpeg改进开发
  10. TensorRT 加速性能分析