zoukankan      html  css  js  c++  java
  • Codeforces Round #290 (Div. 2) B (dfs)

    题目链接:http://codeforces.com/problemset/problem/510/B

    题意:判断图中是否有某个字母成环

    思路:直接dfs就好了,注意判断条件:若下一个字母与当前字母相同且已搜过,则存在满足题意的环

    代码:

     1 #include <bits/stdc++.h>
     2 #define MAXN 60
     3 using namespace std;
     4 
     5 int mp[MAXN][MAXN], vis[MAXN][MAXN], m, n;
     6 int dir[4][2]={0, 1, 1, 0, -1, 0, 0, -1};
     7 bool flag=false;
     8 
     9 void dfs(int x, int y, int direction){
    10     if(flag){
    11         return;
    12     }
    13     for(int i=0; i<4; i++){
    14         int xx=x+dir[i][0];
    15         int yy=y+dir[i][1];
    16         if(xx>=0&&xx<n&&yy>=0&&yy<m){
    17             if(i+direction!=3&&vis[xx][yy]&&mp[xx][yy]==mp[x][y]){ //***若下一个数字与当前数字相同且已经搜过,则存在满足题意的环,注意别往回的方向搜了
    18                 flag=true;
    19                 return;
    20             }else if(!vis[xx][yy]&&mp[xx][yy]==mp[x][y]){
    21                 vis[xx][yy]=1;
    22                 dfs(xx, yy, i);
    23             }
    24         }
    25     }
    26 }
    27 
    28 int main(void){
    29     char ch;
    30     cin >> n >> m;
    31     for(int i=0; i<n; i++){
    32         for(int j=0; j<m; j++){
    33             cin >> ch;
    34             mp[i][j]=ch-'A'+1;
    35         }
    36     }
    37     for(int i=0; i<n; i++){
    38         for(int j=0; j<m; j++){
    39             if(!vis[i][j]){
    40                 vis[i][j]=1;
    41                 dfs(i, j, 0);
    42                 if(flag){
    43                     cout << "Yes" << endl;
    44                     return 0;
    45                 }
    46             }
    47         }
    48     }
    49     cout << "No" << endl;
    50     return 0;
    51 }
  • 相关阅读:
    数列分块入门 1-8
    最远点对 [线段树+树的直径]
    实验室外的攻防战 UOJ#180 [树状数组]
    二叉搜索树 [四边形不等式优化区间dp]
    树上的等差数列 [树形dp]
    序列 [树状数组+离散化]
    ATcoder1983 BBQ Hard
    8.18日报
    8.17日报
    8.16日报
  • 原文地址:https://www.cnblogs.com/geloutingyu/p/6498138.html
Copyright © 2011-2022 走看看