问题 J: 棋盘行走

时间限制: 1 Sec  内存限制: 128 MB
[命题人:admin]

题目描述

小Biu在玩一个棋盘游戏,这个游戏给出一个n*m的棋盘,并且每个点上有一个棋子,棋子的颜色
用一个大写字母表示。
小Biu获得游戏胜利的条件是:
1.选择一个棋子作为起点。
2.每次只能走上下左右四个方格,并且下一步方格的颜色要与当前格颜色相同
3.每个块只能经过一次,要经过不少于4个不同的格子而且最终要走回起点。
问小Biu是否可以赢得游戏的胜利

输入

第一行包含两个整数n和m (2≤n,m≤50):棋盘的行和列。
接下来n行,每行包含一个有m个字母的串,表示当前行每一个点的颜色。每一个字母都是大写字母。

输出

如果小Biu可以获得胜利输出Yes,否则输出No。

样例输入 Copy

3 4
AAAA
ABCA
AAAA

样例输出 Copy

Yes

提示

1. 样例解释
样例中所有的'A'形成一个环。

2. 数据范围
对于20%的数据,n *m<=10;
对于65%的数据,n *m<=100;
对于100%的数据, n *m<=2500;

 
AC代码1:
#pragma GCC optimize(2)
#include<bits/stdc++.h>
using namespace std;
inline int read() {int x=,f=;char c=getchar();while(c!='-'&&(c<''||c>''))c=getchar();if(c=='-')f=-,c=getchar();while(c>=''&&c<='')x=x*+c-'',c=getchar();return f*x;}
typedef long long ll;
char a[][];
int n,m;
int flag=;
int vis[][] = {
{ , },
{ , },
{ , - },
{ -, } };
int c[][]={};
int d[][]={};
void dfs(char ch,int x,int y,int t){
if(flag){
return ;
}
if(d[x][y]&&t>){
flag=;
return ;
}
for(int k=;k<;k++){
int xx=x+vis[k][];
int yy=y+vis[k][];
if ( xx>=n || xx< || yy>=m || yy< || c[xx][yy] || ch!=a[xx][yy] )
continue;
c[xx][yy]=;
dfs(ch,xx,yy,t+);
c[xx][yy]=;
}
}
int main()
{
memset(c,,sizeof(c));
memset(d,,sizeof(d));
cin>>n>>m;
for(int k=;k<n;k++){
cin>>a[k];
}
for(int i=;i<n;i++){
for(int j=;j<m;j++){
d[i][j]=;
dfs(a[i][j],i,j,);
if(flag==){
break;
}
d[i][j]=;
}
if(flag){
break;
}
}
if(flag){
printf("Yes\n");
}
else{
printf("No\n");
}
return ;
}

AC代码2:

#pragma GCC optimize(2)
#include<bits/stdc++.h>
using namespace std;
inline int read() {int x=,f=;char c=getchar();while(c!='-'&&(c<''||c>''))c=getchar();if(c=='-')f=-,c=getchar();while(c>=''&&c<='')x=x*+c-'',c=getchar();return f*x;}
typedef long long ll;
char a[][];
int n,m;
int flag=;
int vis[][] = {
{ , },
{ , },
{ , - },
{ -, } };
int c[][]={};
int d[][]={};
void dfs(char ch,int x,int y,int t){
if(flag){
return ;
}
for(int k=;k<;k++){
int xx=x+vis[k][];
int yy=y+vis[k][];
if(d[xx][yy]&&t>){
flag=;
return ;
}
if ( xx>=n || xx< || yy>=m || yy< || c[xx][yy] || ch!=a[xx][yy] )
continue;
c[xx][yy]=;
dfs(ch,xx,yy,t+);
c[xx][yy]=;
}
}
int main()
{
memset(c,,sizeof(c));
memset(d,,sizeof(d));
cin>>n>>m;
for(int k=;k<n;k++){
cin>>a[k];
}
for(int i=;i<n;i++){
for(int j=;j<m;j++){
d[i][j]=;
c[i][j]=;
dfs(a[i][j],i,j,);
if(flag==){
break;
}
d[i][j]=;
c[i][j]=;
}
if(flag){
break;
}
}
if(flag){
printf("Yes\n");
}
else{
printf("No\n");
}
return ;
}

dfs(迷宫)的更多相关文章

  1. DFS迷宫递归所有路径 新手入门

    这篇文章写给自己以后复习和个个入门朋友:提示同学们一定耐心看完解释 哪怕看得很难受,我是新手我懂大家的心烦.看完后慢慢体会代码 我们假设迷宫为如下状况:         {0,0,1,0}       ...

  2. DFS与DFS迷宫问题

    一天蒜头君掉进了一个迷宫里面,蒜头君想逃出去,可怜的蒜头君连迷宫是否有能逃出去的路都不知道. 看在蒜头君这么可怜的份上,就请聪明的你告诉蒜头君是否有可以逃出去的路. 输入格式 第一行输入两个整数n 和 ...

  3. HDU 2102 A计划(DFS)

    题目链接 Problem Description 可怜的公主在一次次被魔王掳走一次次被骑士们救回来之后,而今,不幸的她再一次面临生命的考验.魔王已经发出消息说将在T时刻吃掉公主,因为他听信谣言说吃公主 ...

  4. 洛谷——P1746 离开中山路

    P1746 离开中山路 题目背景 <爱与愁的故事第三弹·shopping>最终章. 题目描述 爱与愁大神买完东西后,打算坐车离开中山路.现在爱与愁大神在x1,y1处,车站在x2,y2处.现 ...

  5. 小鼠迷宫问题【sdut1157】【dfs,bfs综合题目】

    小鼠迷宫问题 Time Limit: 1500ms   Memory limit: 65536K  有疑问?点这里^_^ 题目描述 小鼠a与小鼠b身处一个m×n的迷宫中,如图所示.每一个方格表示迷宫中 ...

  6. sdut 2449走迷宫【最简单的dfs应用】

    走迷宫 Time Limit: 1000ms   Memory limit: 65536K  有疑问?点这里^_ 题目描述 一个由n * m 个格子组成的迷宫,起点是(1, 1), 终点是(n, m) ...

  7. hdu 1728:逃离迷宫(DFS,剪枝)

    逃离迷宫 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submis ...

  8. ytu 1980:小鼠迷宫问题(DFS 深度优先搜索)

     小鼠迷宫问题 Time Limit: 2 Sec  Memory Limit: 64 MB Submit: 1  Solved: 1 [Submit][Status][Web Board] Desc ...

  9. 【DFS/BFS】NYOJ-58-最少步数(迷宫最短路径问题)

    [题目链接:NYOJ-58] 经典的搜索问题,想必这题用广搜的会比较多,所以我首先使的也是广搜,但其实深搜同样也是可以的. 不考虑剪枝的话,两种方法实践消耗相同,但是深搜相比广搜内存低一点. 我想,因 ...

  10. NYOJ306 走迷宫(dfs+二分搜索)

    题目描写叙述 http://acm.nyist.net/JudgeOnline/problem.php?pid=306 Dr.Kong设计的机器人卡多非常爱玩.它经常偷偷跑出实验室,在某个游乐场玩之不 ...

随机推荐

  1. 【C语言】思维导图

    长按图片或右键另存为保存哦(´-ω-`)

  2. 在多租户(容器)数据库中如何创建PDB:方法1 从种子创建PDB

    基于版本:19c (12.2.0.3) AskScuti 创建方法:从零开始创建一个PDB(从PDB$SEED创建新的PDB) 对应路径:Creating a PDB --> Creating ...

  3. python3练习100题——014

    这题卡了我一整天,然后还是看答案撸了一遍- 原题链接:http://www.runoob.com/python/python-exercise-example14.html 题目:将一个正整数分解质因 ...

  4. Visual Studio Code快捷键大全

    原文链接:https://segmentfault.com/a/1190000007688656 常用 General 按 Press 功能 Function Ctrl + Shift + P,F1 ...

  5. leetcode 64. 最小路径和 动态规划系列

    目录 1. leetcode 64. 最小路径和 1.1. 暴力 1.2. 二维动态规划 2. 完整代码及执行结果 2.1. 执行结果 1. leetcode 64. 最小路径和 给定一个包含非负整数 ...

  6. UOJ 34: 多项式乘法(FFT模板题)

    关于FFT 这个博客的讲解超级棒 http://blog.miskcoo.com/2015/04/polynomial-multiplication-and-fast-fourier-transfor ...

  7. NOIP做题练习(day5)

    A - 中位数图 题面 题解 先找出题意中的\(b\)所在的位置. 再以这个位置为中心,向右\(for\)一遍有多少个大于/小于该数的数 大于就\(++cs\) 小于就\(--cs\). 因为这个数是 ...

  8. NOIP2012 疫情控制 题解(LuoguP1084)

    NOIP2012 疫情控制 题解(LuoguP1084) 不难发现,如果一个点向上移动一定能控制更多的点,所以可以二分时间,判断是否可行. 但根节点不能不能控制,存在以当前时间可以走到根节点的点,可使 ...

  9. 【资源分享】Garry's mod 自制整合包

    *----------------------------------------------[下载区]----------------------------------------------* ...

  10. windows 下安装memcache拓展

    Windows下安装memcached (linux 接下来会继续 学习) 以管理员身份进入CMD 模式,具体方法:C:/windows/system32 管理员身份打开cmd.exe memcach ...