1416 两点

#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
char map[55][55];
int v[55][55];
int flag;
int n,m;
int dir [4][2]={0,1,1,0,0,-1,-1,0};
void dfs(int x,int y,int d,char f)
{
    if(x>n||x<0||y<0||y>m||map[x][y]!=f)
    {
        return;
    }
    if(v[x][y]==1)
    {
        flag=1;
        return;
    }
    v[x][y]=1;
    for(int i=0;i<4;i++)
    {

        if (d==0&&i==2) continue;
        if (d==1&&i==3) continue;
        if (d==2&&i==0) continue;
        if (d==3&&i==1) continue;
        int dx=x+dir[i][0];
        int dy=y+dir[i][1];
        dfs(dx,dy,i,f);
    }
}
int main()
{
    while(cin>>n>>m)
    {
        memset(v,0,sizeof(v));
        for(int i=0;i<n;i++)
            for(int j=0;j<m;j++)
            cin>>map[i][j];
        for(int i=0;i<n;i++)
            for(int j=0;j<m;j++)
            {
                if(v[i][j]!=1)
                {
                    dfs(i,j,-1,map[i][j]);
                }
            }
            if(flag==1)cout<<"Yes"<<endl;
            else cout<<"No"<<endl;
    }
    return 0;
}

  

原文地址:https://www.cnblogs.com/biubiuWham/p/10031461.html

时间: 2024-10-08 06:27:22

1416 两点的相关文章

51nod 1416 两点 dfs

1416 两点 题目来源: CodeForces 基准时间限制:1 秒 空间限制:131072 KB 分值: 20 难度:3级算法题  收藏  关注 福克斯在玩一款手机解迷游戏,这个游戏叫做”两点”.基础级别的时候是在一个n×m单元上玩的.像这样: 每一个单元有包含一个有色点.我们将用不同的大写字母来表示不同的颜色. 这个游戏的关键是要找出一个包含同一颜色的环.看上图中4个蓝点,形成了一个环.一般的,我们将一个序列 d1,d2,...,dk 看成一个环,当且仅当它符合下列条件时: 1.    这

51nod - 1416 两点

题目链接:1416 两点 并查集随便搞一下就过了. 1 #include <bits/stdc++.h> 2 using namespace std; 3 const int maxn = 2505; 4 int n, m; 5 int fa[maxn]; 6 char s[55][55]; 7 //int dx[]={1, 1, 0, 0} 8 int ety(int x, int y) { 9 return x*m+y; 10 } 11 void init(int n) { 12 for(

ios根据gps坐标来计算两点间的距离

//ios根据gps坐标来计算两点间的距离 //x1,y1 点1的坐标 x2,y2点2的坐标 -(double) gps2m:(double)x1 _y1:(double)y1 _x2:(double)x2 _y2:(double)y2{ double radLat1 = (x1 * 3.1416 / 180.0); double radLat2 = (x2 * 3.1416 / 180.0); double a = radLat1 - radLat2; double b = (y1 - y2)

UVA 1416 - Warfare And Logistics(最短路树)

UVA 1416 - Warfare And Logistics 题目链接 题意:给定一个无向图,每个边一个正权,c等于两两点最短路长度之和,现在要求删除一边之后,新图的c值最大的是多少 思路:直接枚举删边,每次做一次dijkstra的话复杂度太高,其实如果建好最短路树,如果删去的边在最短路树上,才需要去做,这样复杂度就优化到(n^2mlog(n)),勉强可以接受 代码: #include <cstdio> #include <cstring> #include <vecto

计算两点间的距离

计算两点间的距离 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 208295    Accepted Submission(s): 72641 Problem Description 输入两点坐标(X1,Y1),(X2,Y2),计算并输出两点间的距离. Input 输入数据有多组,每组占一行,由4个实数组成,分别表示x1,y1,x2,y

CSU 1416 Practical Number

原题链接:http://acm.csu.edu.cn/OnlineJudge/problem.php?id=1416 结论题,具体判断方法请点击这个网址. 筛素数是肯定的,但一开始定的范围太大了,想当然要筛到10^9的质数,但仔细想想,只要到sqrt(10^9)就可以了,最后的那一个质数是最后一步的比较,不用筛出来. #include <stdio.h> #include <string.h> #include <iostream> using namespace st

新知识:Java 利用itext填写pdf模板并导出(昨天奋战到深夜四点,知道今天两点终于弄懂)

废话少说,不懂itext干啥用的直接去百度吧. ***************制作模板******************* 1.先用word做出界面 2.再转换成pdf格式 3.用Adobe Acrobat 打开你刚刚用word转换成的pdf 会出现如下界面 下一步 点击浏览,选择刚才你转换好的pdf 下一步 4.打开后它会自动侦测并命名表单域,右键表单域,点击属性,出现文本域属性对话框,有的人说要改成中文字体,可是我没有改一样成功啦 5.一般情况下不需要修改什么东西,至少我没有修改哦 6.直

mysql 下 计算 两点 经纬度 之间的距离

公式如下,单位米: 第一点经纬度:lng1 lat1 第二点经纬度:lng2 lat2 round(6378.138*2*asin(sqrt(pow(sin( (lat1*pi()/180-lat2*pi()/180)/2),2)+cos(lat1*pi()/180)*cos(lat2*pi()/180)* pow(sin( (lng1*pi()/180-lng2*pi()/180)/2),2)))*1000) 例如: SELECT store_id,lng,lat, ROUND(6378.13

两点之间最短路径:弗洛伊德算法

弗洛伊德算法是计算无向有权图中两点间最短路径的算法,复杂度为O(n^3).其思路是将两点间距离分为过(指定的)第三点或是不过,然后取它们的最小值,如此循环就可以得到两点之间真正的最小值. void floyd() { for (int k = 0; k < n; ++k) { for (int i = 0; i < n; ++i) { for (int j = 0; j < n; ++j) { //在当前i到j经过k点的路径与直连的路径中选最短 matrix[i][j] = min(ma