zoukankan      html  css  js  c++  java
  • 洛谷 P1101 单词方阵(dfs)

    https://www.luogu.org/problem/P1101

    八个方向中的任一方向有没有出现过"yizhong"单词

    // luogu-judger-enable-o2
    #include <cstdio>
    #include <iostream>
    #include <algorithm>
    #include <cmath>
    #include <queue>
    #include <vector>
    #include <cstring>
    #include <map>
    #define mem(a) memset(a,0,sizeof(a))
    using namespace std;
    typedef long long lll;
    const int maxn = 200005;
    const lll INF = 0x3f3f3f3f3f;
    string s[105];
    int vis[105][105],n;
    int dir[8][2]= {0,1,0,-1,1,0,-1,0,-1,-1,1,-1,-1,1,1,1};
    char a[10]= {"yizhong"};
    bool flag;
    void dfs(int x,int y,int k,int kk)
    {
        if(kk > 6) flag =1;
        else
        {
            int fx = x+dir[k][0],fy = y+dir[k][1];
            if(fx>=0&&fx<n&&fy>=0&&fy<n&&s[fx][fy] == a[kk])
            {
                dfs(fx,fy,k,kk+1);
                if(flag == 1) vis[fx][fy]=1;
            }
        }
    }
    int main()
    {
        cin >> n;
        for(int i=0; i<n; i++) cin >> s[i];
        for(int i=0; i<n; i++)
            for(int j=0; j<n; j++) if(s[i][j] == 'y')
                {
                    for(int k=0; k<8; k++)
                        {
                        flag =0;
                        dfs(i,j,k,1);
                        if(flag == 1) vis[i][j] =1;
                        }
                }
        for(int i=0;i<n;i++)
        {
            for(int j=0;j<n;j++)
            {
                if(vis[i][j] == 1) cout << s[i][j];
                else cout << "*" ;
            }
            cout << endl;
        }
        return 0;
    }
  • 相关阅读:
    可持续化线段树(主席树)
    2016-06-19 NOIP模拟赛
    0618图的整理
    1536 海战
    1005 生日礼物
    3280 easyfinding
    2594 解药还是毒药
    2919 选择题
    1845 二叉查找树
    1174 靶形数独
  • 原文地址:https://www.cnblogs.com/LLLAIH/p/11293997.html
Copyright © 2011-2022 走看看