• [1009] 连连看

  • 时间限制: 1000 ms 内存限制: 65535 K
  • 问题描述
  • 大家都知道一个曾经风靡一时的游戏:连连看。 XadillaX在做连连看的时候不专心,做做就去玩别的去了,但他想早点完成这个小游戏,于是他找到你来帮他完成连连看的一段核心代码。 首先会给出一副连连看的分布图形,然后会给你各种鼠标点击操作(鼠标点击的坐标),你的工作就是算出最后还剩下几个方块。 鼠标操作之后的判断是这样的:在没有记录任何图形的情况下,第一下点击会记录当前点击的图形,第二下以及之后的每次点击都会记录点击的图形,并且与之前的图形对比,如果可消就消掉两块,如果不可消就将之前之前点击的图形取消记录(但不取消记录当前点击的图形)。可消的概念就是能在两次拐角内能连接起来,并且两个图形是相同的。若点击的是空块,则不做任何操作。

  • 输入
  • 第一行一个正整数T(0 < T <= 10),表示数据组数。
    接下来T组数据,每组数据的第一行是两个正整数n和m(2 <= m, n <= 100),表示连连看分布图的高和宽(每个图形占一个单位高和宽)。
    接下来n行表示图形的分布,由大写'A'~'Z'以及'0'组成,其中大写字母代表一个图形(相同字母的表示图形相同),'0'表示这个地方为空。
    接下来一行为一个正整数Q(1 <= Q <= 100),代表鼠标操作次数。
    最后Q行,每行有两个正整数,代表鼠标点击的坐标Xi, Yi(0 <= Xi, Yi, < 100)。
  • 输出
  • 对于每组,输出个正整数,代表本组数据最终会剩下几个图形。一组数据占一行。
  • 样例输入
  • 1
    3 3
    QZZ
    I0Q
    AAI
    6
    0 0
    2 1
    2 0
    1 0
    0 0
    2 1
    
  • 样例输出
  • 4
  • 思路:哈哈哈哈,模拟呀~~
  • 用BFS搜就行啦,记录转弯次数,超过2次的直接GG掉
  • 然后搜之前在外围补一圈0,别问为什么。
  • #include <iostream>
    #include <cstdio>
    #include <cstring>
    #include <queue>
    #include <algorithm>
    using namespace std;
    int n,m,k,lx,ly,nx,ny,flag;
    int f[4][2]={{0,-1},{0,1},{-1,0},{1,0}};
    char mp[105][105];
    bool vis[105][105];
    bool jug(int x,int y,int tx,int ty)
    {if(x<0||x>n+1||y<0||y>m+1)return false;if(mp[x][y]=='0')return true;if(x==tx&&y==ty)return true;return false;
    }
    struct node
    {int x,y,turn,f;
    };
    int bfs(int sx,int sy,int tx,int ty)
    {node s,t;queue<node> q;s.x=sx,s.y=sy,s.turn=0,s.f=-1;q.push(s);while(!q.empty()){s=q.front();q.pop();//printf("%d %d %d\n",s.x,s.y,s.turn);if(s.x==tx&&s.y==ty&&s.turn<=3){   //printf("asdasd\n");mp[sx][sy]='0';mp[tx][ty]='0';return 1;}for(int i=0;i<4;i++){t.x=s.x+f[i][0],t.y=s.y+f[i][1];if(jug(t.x,t.y,tx,ty)&&!vis[t.x][t.y]){vis[t.x][t.y]=1;if(s.f!=i)t.turn=s.turn+1;else t.turn=s.turn;t.f=i;if(t.turn<=3)q.push(t);}}}return 0;
    }
    int main()
    {int T,ans;scanf("%d",&T);while(T--){   flag=0;ans=0;scanf("%d %d",&n,&m);for(int i=1;i<=n;i++)scanf("%s",mp[i]+1);for(int i=0;i<=n+1;i++){for(int j=0;j<=m+1;j++){if(i==0||i==n+1)mp[i][j]='0';if(j==0||j==m+1)mp[i][j]='0';}}scanf("%d",&k);lx=-1,ly=-1;for(int i=1;i<=k;i++){scanf("%d %d",&ny,&nx);ny++,nx++;if(lx!=-1&&ly!=-1){if(mp[nx][ny]==mp[lx][ly]&&mp[nx][ny]!='0')memset(vis,0,sizeof(vis)),flag=bfs(nx,ny,lx,ly);}//printf("%d %d %d %d %d\n",flag,lx,ly,nx,ny);if(mp[nx][ny]!='0'&&!flag)lx=nx,ly=ny;if(flag)lx=-1,ly=-1,flag=0;}//   for(int i=1;i<=n;i++)//      printf("%s\n",mp[i]);for(int i=1;i<=n;i++)for(int j=1;j<=m;j++)if(mp[i][j]!='0')ans++;printf("%d\n",ans);}return 0;
    }

转载于:https://www.cnblogs.com/weibaba/p/5817610.html

NOJ 1009连连看相关推荐

  1. java中showconfirmdialog_Java小游戏之连连看

    连连看大家应该都玩过,不多说直接上一个做好的界面截图吧,所有的功能都在上面的,要做的就只是如何去实现它们了. 差不多就是这个样子.先说一下大致的思路吧.首先编写基本的界面:把什么按钮啊,表格啊什么的都 ...

  2. 第一次搜索-连连看= =

    连连看 Time Limit: 20000/10000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Subm ...

  3. 杭电1175简单搜索 连连看

    连连看 Time Limit: 20000/10000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submiss ...

  4. 上接游戏人生Silverlight(4) - 连连看[Silverlight 2.0(c#)]

    /// <summary>                 /// 获取指定的 CardPoint 的 Y 轴方向上的所有 ImageName 为 Global.EmptyImageNam ...

  5. 连连看html游戏全代码js、jquery操作

    连连看html游戏全代码js.jquery操作 运行图片 目录路径 连连看水果方块版.html 连连看算法 进行下一个游戏的开发! 注意事项 我会把html文件.css文件提供下载地址,文件夹路径也展 ...

  6. java连连看(GUI)

    /** To change this license header, choose License Headers in Project Properties.* To change this tem ...

  7. 浙江大学PAT考试1009~1012(1010上帝是冠军。。)

    哎,pat1010即使java书面,只有java书面,还增加了两个点,,.啊,智商捉佳,主要pat有些不给明确的范围.造成遐想空间.. 还是按顺序介绍.. 题目地址:http://pat.zju.ed ...

  8. hdoj1175 连连看(dfs+剪枝)

    处理连连看问题. 要求拐弯方向不多于两次.剪枝很重要!!! 用dir记录当前方向.Orz,居然没想到. 1 #include<iostream> 2 #include<cstring ...

  9. (转载)连连看游戏外挂详细制作过程

    标 题: [原创]新人入手第一个游戏外挂,附上详细制作过程 作 者: caigui 时 间: 2013-01-09,00:56:16 链 接: http://bbs.pediy.com/showthr ...

最新文章

  1. 电子文件归档为什么非云不可
  2. xilinxaxi ethernet 硬件时间戳告警
  3. AtCoder-2379 - 连接竹竿 思维 | 数学
  4. FPGA积沙成塔(目录篇)
  5. 4 转推流格式_ppt 转 pdf怎么转?这个宝藏技巧不会太亏了!
  6. SURF特征提取分析(一)
  7. IO流 (四) ----- 转换流和标准字节输出流
  8. FreeWheel业务系统微服务化过程经验分享
  9. 【MapReduce】MapReduce工作机制
  10. 搭建自己的病毒扫描系统clamav-原版教程
  11. win7无法打开计算机共享文件夹,win7无法共享文件夹 共享文件设置不了共享怎么办?...
  12. mysql 复制frm_通过拷贝frm myd myi opt文件来实现mysql的备份和还原
  13. 杏子语录(2020年01月)
  14. Vulkan_Shader_Day01—光照(物体颜色)
  15. 软件测试面试题:常见的性能测试方法有哪些?以及每类测试方法的目的是什么?
  16. 有关前端的一些问题(一)
  17. 十年 (2002.6.18)--黑色的2002年世界杯,足球之耻辱
  18. unable to read local cache ‘C:\\Users\\admin/gensim-data\\information.json‘ during fallback 解决办法
  19. 那些让你惊掉下巴到肚皮上的python冷知识(二)
  20. 尚硅谷--Mysql--高级篇

热门文章

  1. 《系统之美》读书笔记(粗读)
  2. 牙齿间隙变大怎么办_洗牙会导致牙缝变宽、牙齿松动吗?
  3. 【转载】ddr3参数-内存系列一:快速读懂内存条标签
  4. 5G射频前端核心器件之一——射频滤波器向高频化、模组化方向发展
  5. 类与对象(中) 构造函数和析构函数
  6. 树莓派 4 发布,终于支持 USB 3.0 和千兆网……240 元起步
  7. java文件下载的文件名乱码问题的解决
  8. Youtbe 4k 起播阶段时间花费分析
  9. 两分钟教你使用两款可视化工具
  10. [C语言]求两个数的最小公倍数