首页 > 代码库 > QQ游戏连连看
QQ游戏连连看
描述
众所周知,lfq198502非常喜欢玩连连看游戏。连连看游戏 ,只要将相同花色的两张牌用三根以内的直线连在一起就可以消除, 规则简单容易上手 。
操作:第一次使用鼠标点击棋盘中的棋子,该棋子此时为“被选中”,以特殊方式显示;再次以鼠标点击其他棋子,若该棋子与被选中的棋子图案相同,且把第一个棋子到第二个棋子连起来,中间的直线不超过 3 根,则消掉这一对棋子,否则第一颗棋子恢复成未被选中状态,而第二颗棋子变成被选中状态。
我们可以把连连看的界面想象成一个10×10的方格,每个方格内都放有一种类型的图案或者为空,简单起见,我们用不同的字符代表不同的图案,空格表示没有图案。你的任务是,给出游戏的初始界面,和游戏过程中lfq198502鼠标点击的坐标记录,判断他在这些操作后是否将图案全部消完。
输入
输入包含多组测试情况,每组情况数据包含两部分。
第一部分:10行字符串,每行包含10个字符(空格表示该方格为空,其他字符表示方格中的有用该字符表示的图案),表示游戏的初始界面。
第二部分:首先是一个整数n,表示lfq198502的鼠标点击次数;接下来的n行,每行两个整数x,y(1≤x≤10, 1≤y≤10),表示鼠标点击位置所在的行和列。
输出
每组测试情况输出一行。如果lfq198502能够将图案全部消除,输出“Yes,all patterns are eliminated!”;否则,输出“No,m pattern(s) are left!”。
样例输入
2
abccba x
bax
ab 8
8
@ (
( @
18
1 3
1 4
1 2
1 5
1 1
1 6
1 10
2 3
2 2
3 2
3 3
2 1
3 7
4 10
8 1
10 7
10 3
8 10
ab 8
ba
8
@
@
8
1 1
2 2
1 2
2 1
1 10
4 10
8 1
10 7
abccba x
bax
ab 8
8
@ (
( @
18
1 3
1 4
1 2
1 5
1 1
1 6
1 10
2 3
2 2
3 2
3 3
2 1
3 7
4 10
8 1
10 7
10 3
8 10
ab 8
ba
8
@
@
8
1 1
2 2
1 2
2 1
1 10
4 10
8 1
10 7
样例输出
Yes,all patterns are eliminated!
No,4 pattern(s) are left!
No,4 pattern(s) are left!
#include<iostream> #include<cstring> #include<stdio.h> using namespace std; char a[20][20]; int f[20][20]; int ff[20][20]; int vir[]={0,1,0,-1,0}; int t,m,x1,y1,x2,y2,flag,tt; char ch; int dfs(int x,int y,int temp,int fx)//x,y是消除的点,temp是记录转弯的次数,fx是记录方向 { if(flag)return 0; if(temp>3)return 0; if(x==x1&&y==y1) { flag=1; return 0; } for(int i=0;i<4;i++) { int ax=x+vir[i]; int ay=y+vir[i+1]; if(ax>=1&&ax<=10&&ay>=1&&ay<=10&&a[ax][ay]==' '&&!ff[ax][ay]) { ff[ax][ay] = 1; int ttt = temp+1; if(fx==i) { ttt--; x2=ax; y2=ay; } dfs(ax,ay,ttt,i); ff[ax][ay] = 0; } } return 0; } int main() { scanf("%d",&t); int x,y; while(t--) { memset(a,' ',sizeof(a)); for(int i=1;i<=10;i++) { getchar(); for(int j=1;j<=10;j++) { ch=getchar(); if(ch==' ')a[i][j]=' '; else a[i][j]=ch; } } getchar(); scanf("%d",&m); memset(f,0,sizeof(f)); x1=-1,y1=-1; while(m--) { scanf("%d%d",&x,&y); if(!f[x][y]&&x1==-1&&y1==-1) { f[x][y]=1; x1=x; y1=y; } else { memset(ff,0,sizeof(ff)); char p,q; p=a[x][y]; q=a[x1][y1]; if(p==q) { a[x][y]=' '; a[x1][y1]=' '; x2=x;y2=y; flag=tt=0; f[x][y] = 1; dfs(x,y,0,-1); if(!flag) { a[x][y]=p; a[x1][y1]=q; f[x1][y1]=0; f[x][y]=1; x1=x; y1=y; } else { f[x1][y1]=0; f[x][y]=0; x1=-1; y1=-1; } } else { f[x][y]=1; f[x1][y1]=0; x1=x; y1=y; } } } int flag1=0; for(int i=1;i<=10;i++) for(int j=1;j<=10;j++) if(a[i][j]!=' ') { flag1++; } if(flag1) printf("No,%d pattern(s) are left!\n",flag1); else printf("Yes,all patterns are eliminated!\n"); } return 0; }
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。