HDU_1175_连连看

题目:http://acm.hdu.edu.cn/showproblem.php?pid=1175

大意:连连看规则,只能转两次弯,先输入矩阵0表示没有棋子,正整数表示不同的棋子,然后询问,输入两点坐标,判断能否消除。(询问没有先后顺序,都针对当前状态)

分析:dfs,普通迷宫搜索,加上判断转弯次数。

总结:看题仔细,继续加强dfs。

代码:

#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
using namespace std;
#define N 1005

int dir[4][2]= {{-1,0},{0,1},{1,0},{0,-1}};
int map[N][N];
int vis[N][N];
int n,m;
int flag=0;
int a1,a2,b1,b2;

bool inside(int x,int y)
{
    if(x>=1&&x<=n&&y>=1&&y<=m)
        return 1;
    return 0;
}

void dfs(int x,int y,int turn,int dire)
{
    if(!inside(x,y))
        return;
    if(turn-1>2)
        return;
    if(x==b1&&y==b2)
    {
        //cout<<turn<<‘*‘<<endl;
        flag=1;
        return;
    }
    if(flag==1)
        return;
    for(int i=0; i<4; i++)
    {
        int mx=x+dir[i][0];
        int my=y+dir[i][1];
        if(map[mx][my]==0&&!vis[mx][my])
        {
            if(i!=dire)
            {
                vis[mx][my]=1;
                dfs(mx,my,turn+1,i);
                vis[mx][my]=0;
            }
            else
            {
                vis[mx][my]=1;
                dfs(mx,my,turn,dire);
                vis[mx][my]=0;
            }
        }

    }
}

int main()
{
    int q;
    while(scanf("%d%d",&n,&m)!=EOF&&n&&m)
    {
        for(int i=1; i<=n; i++)
            for(int j=1; j<=m; j++)
                scanf("%d",&map[i][j]);
        scanf("%d",&q);
        while(q--)
        {

            scanf("%d%d%d%d",&a1,&a2,&b1,&b2);
            if((map[a1][a2]!=map[b1][b2])||(map[a1][a2]==0||map[b1][b2]==0))
                printf("NO\n");
            else
            {
                flag=0;
                int tmp=map[a1][a2];
                map[b1][b2]=0;
                memset(vis,0,sizeof(vis));
                dfs(a1,a2,0,5);
                map[a1][a2]=map[b1][b2]=tmp;
                if(flag)
                    printf("YES\n");
                else
                    printf("NO\n");
            }
        }
    }
    return 0;
}
时间: 2024-10-09 23:08:43

HDU_1175_连连看的相关文章

宠物连连看2完整Android代码项目

宠物连连看2完整代码,该源代码支持多种风格的连连看游戏的,如有国旗类的连连看,还有宠物连连看的等,主要的功能实现了无尽关卡挑战模式.还有催命倒计时,以及链接提示,暂停.多样图片集,挑战眼力和速度等,而且还带有广告自行解除就可以也可学习怎样加广告.大屏手机和平板玩才够爽啊.希望可以帮到大家的学习. 源代码下载:http://code.662p.com/view/5414.html <ignore_js_op><ignore_js_op> <ignore_js_op><

连连看的设计与实现——四人小组项目(NABCD)

小组名称:天天向上 成员:王森.张政,张金生,栾骄阳 题目:连连看游戏 NABCD N(需求) 游戏最大的乐趣在于玩法,我们要想在众多的连连看游戏当中脱颖而出,就需要增加更多富有乐趣.吸引用户的玩法. A( 做法) 讲过小组讨论以及咨询同学,想了一些具有趣味性的玩法,如下: 玩法1:增加时间图标按钮,如果时间图标按钮消除,系统会增加游戏时间. 玩法2:用户在系统提供的图片中选择喜欢的按钮图片,系统根据用户的选择生成一关. 玩法3:系统设有排行榜功能.在一局游戏中,当两个按钮消除成功时,增加游戏积

四人小组项目——连连看

小组名称:天天向上 组长:王森 组员:张政,张金生,栾骄阳 题目:连连看游戏 项目期限:十周内,暂定2016.9.10-2016.11.19 需求分析: 1.概要:玩家可以将2个相同图案的牌连接起来,连接不多于3根直线,就可以成功的将两个图片消除. 2.操作:第一次使用鼠标点击游戏界面中的牌,该牌此时为“被选中”以特殊方式显示:再次以鼠标点击其他牌,若该牌与被选中的牌图案相同,且把第一个牌到第二个牌连起来,中间的直线不超过3根,则消掉这一对牌,否则第一个牌变为未被选中状态,而第二张牌变成选中状态

HDU 1175 连连看(DFS)

Problem Description “连连看”相信很多人都玩过.没玩过也没关系,下面我给大家介绍一下游戏规则:在一个棋盘中,放了很多的棋子.如果某两个相同的棋子,可以通过一条线连起来(这条线不能经过其它棋子),而且线的转折次数不超过两次,那么这两个棋子就可以在棋盘上消去.不好意思,由于我以前没有玩过连连看,咨询了同学的意见,连线不能从外面绕过去的,但事实上这是错的.现在已经酿成大祸,就只能将错就错了,连线不能从外围绕过.玩家鼠标先后点击两块棋子,试图将他们消去,然后游戏的后台判断这两个方格能

本人第一个android游戏《新连连看》上架

经过艰苦奋战了几天,本人的第一个android游戏<新连连看>最终完毕了第一个版本号,比較简陋.另一部分功能保留没有开放.等第二个版本号再上.用的libgdx框架.可能不是非常出名,可是本人认为真的是非常好用的. 希望大家先去玩一下,然后给我提一些改进的意见.稍后我会进行改进.并在完好后发布源代码供讨论.批评. 传送门:http://app.lenovo.com/app/14452187.html ------------------------------------------------

结对项目-小游戏连连看

我与我的结对同学作的是连连看小游戏,由王庆祥同学进行编码,我来检查以及运行监测,最后得结果如下图: 最后附上我的GitHub地址:https://github.com/jiaweihao/Test.git

hdu 1175 连连看(模拟循环队列)

连连看 Time Limit: 20000/10000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 18149    Accepted Submission(s): 4741 Problem Description "连连看"相信很多人都玩过.没玩过也没关系,下面我给大家介绍一下游戏规则:在一个棋盘中,放了很多的棋子.如果某两个相同的棋子,可以通过一条线连起来(这条

BZOJ 2661 连连看(费用流)

题目链接:http://61.187.179.132/JudgeOnline/problem.php?id=2661 题意:给出一个区间[a,b]中的全部整数,如果其中某两个数x,y(设x>y)的平方差x^2-y^2是一个完全平方数z^2,并且y与z互质,那么就可以将x和y一起消除,同时得到x+y点分数.要求就是,消除的数对尽可能多的前提下,得到的分数尽量多. 思路:首先暴力出所有合法的数对(x,y).然后将每个用到的数字拆成两个点,每个数对连一条边.最后的答案除以2即可. struct nod

Eclipse SWT开发教程以及一个连连看游戏的代码实现下载

原创整理不易,转载请标明出处:Eclipse SWT开发教程以及一个连连看游戏的代码实现下载 代码下载地址:http://www.zuidaima.com/share/1772672482675712.htm 我在前面讲过:如果讲GUI编程一味只讲各个控件的使用方法,那么纯粹是浪费大家时间,如果出书,那绝对是骗钱的.所以我并不会详细地讲解SWT各个控件的具体使用方法.然而的众所周知,Eclipse的UI界面是建立在SWT基础之上的,如果一字不提SWT,似乎也不大可能.SWT是一个优秀的GUI编程