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);
}
时间: 2024-08-27 03:53:38

popStar手机游戏机机对战程序的相关文章

iOS Dev (66) 一个手机游戏程序的基本考虑

iOS Dev (66) 一个手机游戏程序的基本考虑 博客:http://blog.csdn.net/prevention 作者:大锐哥 摘自:Learn iPhone and iPad cocos2d Game Development 1 基本流程内的 handler 程序启动 applicationDidFinishLaunching 程序切到后台 applicationDidEnterBackground 程序运行结束 applicationWillTerminate 2 基本设置 允许用

推荐几个好玩的手机游戏

封面:摘要:这里推荐几个我个人玩过的, 觉得比较好玩的手机游戏给大家,游戏都是iOS平台,安卓平台有没有上线,我没有验证过,请读者们自行搜索! 正文:我个人比较喜欢玩单机游戏,所以推荐的单机游戏会比较多一点, 当然,网游也多少会有一点! 1.暗影格斗2(Shadow Fight2)这个游戏最开始是在facebook上的一个,后来移植到手游平台,游戏的节奏比较慢,最开始玩的时候,是被这个游戏的画面给惊叹了,非常喜欢这种风格的美术画面,虽然我只是个程序! 2.纪念碑谷(Monument Valley

Cocos2d-x手机游戏开发中-组合动作

动作往往不是单一,而是复杂的组合.我们可以按照一定的次序将上述基本动作组合起来,形成连贯的一套组合动作.组合动作包括以下几类:顺序.并列.有限次数重复.无限次数重复.反动作和动画.动画我们会在下一节介绍,本节我们重点顺序.并列.有限次数重复.无限次数重复和反动 下面我们通过一个实例介绍一下组合动作的使用,这个实例如下图所示,下图是一个操作菜单场景,选择菜单可以进入到下图动作场景,在下图动作场景中点击Go按钮可以执行我们选择的动作效果,点击Back按钮可以返回到菜单场景. 下面我们再看看具体的程序

安卓手机游戏测试要点

安卓手机游戏测试要点 广告位 1.上线产品是否需要加上广告,广告是否加上 2.广告位是否遮挡重要信息 评分界面 1.评分界面是否加上 2.评分界面文字是否出现错误,是否符合平台规定 3.按钮是否歧义 4.评分界面是否与游戏界面风格统一 计费部分 1. 计费要求是否达到 2. 购买道具:用户购买道具时,需要明确提示用户道具的名称.费用.并提供"确认"和"取消"功能选择.例:"购买道具***,信息费*元(不含通信费),通过短信代收,是否确认购买?"

优化手机游戏性能,美术相关

何时选择3D(何时保留2D) 作为一个3d游戏美术,我得到的第一个关键教训就是,让所有的东西尽可能的保持低模--不要使用额外的不必要的顶点,如果你确实要让你的模型拥有精度,把它放置在贴图中.比如说,我们的建筑物都是用简单的方块创建而成,然后贴上带有质感的细节纹理. 当我们要为Vogel教授(它只在我们游戏的GUI和HUD中出现)建模时,首先尝试的是3D模型,但是最终,我们还是把它分解为像Flash中那样的多层2D平面.它运行非常流畅,看上去也更棒,事实最终的结果比用3D模型赞非常多!使用带有动画

手机游戏渠道SDK接入工具项目分享(二)万事开头难

一般接到任务后程序员们通常都开始着手进行技术调研了,但我这活是项目负责人.还有一大堆事情要先期准备,没人能帮忙. 一.人力配置 考虑的之前已经有一波人搞了大半年,但没有起色,先期也没有太大人力需求,所以不指望这批人了.因为是外包收钱按人头工时算,所以拉几个自己兄弟填坑. 初期人力配置 服务端x 1.Android x 1 二.开发需求 自己手机游戏CP作了3年,需求直接写完后让对方确认,一次通过. 1.      公司多款游戏都需要使用这套工具,需要作适配兼容,还好都是Unity3D项目.之后我

海量安卓andriod手机游戏开发手机app开发PDF电子书定制制作下载

本人背靠海量纸质图书,可以制作各种纸质书籍的电子化,有需要可以Q:1481449626 <Andriod移动开发技术与应用>作者:李学华主编 页数:228 出版社:北京市:北京邮电大学出版社 出版日期:2013.08 简介:本书以生动具体的案例介绍android移动开发技术,力求通过实际的应用案例使读者快速掌握android移动开发技术. <移动终端应用开发技术 Android实战>作者:林少丹著 页数:232 出版社:北京市:机械工业出版社 出版日期:2013.02 简介:本书共

(转)【译】优化你的手机游戏(没有延迟的,才是健康的)

http://www.unitymanual.com/thread-173-1-1.html 原标题:优化你的手机游戏(没有延迟的,才是健康的)- 一篇给游戏美术设计师读的文章 [译者的话(新浪微博@滚石,欢迎大家一起讨论)] 由于公司目前没有专业的技术美术(Technical Artist),在最近的项目开发中碰了不少壁.于是我就特地做了一些关于美术方面优化的研究,听了一些讲座,阅读了一些文章,你即将阅读的这篇就是其中之一,我觉得不错,并在阅读中获得了共鸣,所以也就决定将这片文章翻译为中文.一

探秘腾讯Android手机游戏平台之不安装游戏APK直接启动法

前言相信这样一个问题,大家都不会陌生,“有什么的方法可以使Android的程序APK不用安装,而能够直接启动”.发现最后的结局都是不能实现这个美好的愿望,而腾讯Android手机游戏平台却又能实现这个功能,下载的连连看,五子棋都没有安装过程,但是都能直接运行,这其中到底有什么“玄机”呢,也有热心童鞋问过我这个问题,本文就为大家来揭开这个谜团.实践我实现了一个小小的Demo,麻雀虽小五脏俱全,为了突出原理,我就尽量简化了程序,通过这个实例来让大家明白后台的工作原理.下载demo的apk程序apks