zoukankan      html  css  js  c++  java
  • P1101 单词方阵 简单dfs

      

    题目描述

    给一n imes nn×n的字母方阵,内可能蕴含多个“yizhong”单词。单词在方阵中是沿着同一方向连续摆放的。摆放可沿着 88 个方向的任一方向,同一单词摆放时不再改变方向,单词与单词之间可以交叉,因此有可能共用字母。输出时,将不是单词的字母用*代替,以突出显示单词。例如:

    输入:
        8                     输出:
        qyizhong              *yizhong
        gydthkjy              gy******
        nwidghji              n*i*****
        orbzsfgz              o**z****
        hhgrhwth              h***h***
        zzzzzozo              z****o**
        iwdfrgng              i*****n*
        yyyygggg              y******g

    输入输出格式

    输入格式:

    第一行输入一个数nn。(7 le n le 1007n100)。

    第二行开始输入n imes nn×n的字母矩阵。

    输出格式:

    突出显示单词的n imes nn×n矩阵。

    输入输出样例

    输入样例#1: 复制
    7
    aaaaaaa
    aaaaaaa
    aaaaaaa
    aaaaaaa
    aaaaaaa
    aaaaaaa
    aaaaaaa
    
    输出样例#1: 复制
    *******
    *******
    *******
    *******
    *******
    *******
    *******
    
    输入样例#2: 复制
    8
    qyizhong
    gydthkjy
    nwidghji
    orbzsfgz
    hhgrhwth
    zzzzzozo
    iwdfrgng
    yyyygggg
    输出样例#2: 复制
    *yizhong
    gy******
    n*i*****
    o**z****
    h***h***
    z****o**
    i*****n*
    y******g



    #include<bits/stdc++.h>
    using namespace std;
    //input by bxd
    #define rep(i,a,b) for(int i=(a);i<=(b);i++)
    #define repp(i,a,b) for(int i=(a);i>=(b);i--)
    #define RI(n) scanf("%d",&(n))
    #define RII(n,m) scanf("%d%d",&n,&m)
    #define RIII(n,m,k) scanf("%d%d%d",&n,&m,&k)
    #define RS(s) scanf("%s",s);
    #define LL long long
    #define pb push_back
    #define fi first
    #define REP(i,N)  for(int i=0;i<(N);i++)
    #define CLR(A,v)  memset(A,v,sizeof A)
    ///////////////////////////////////
    #define inf 0x3f3f3f3f
    #define N 1000
    int n;
    char mp[N][N];
    char str[8]="yizhong";
    int vis[N][N];
    int dx[8]={0,0,-1,1,1,1,-1,-1};
    int dy[8]={1,-1,0,0,1,-1,1,-1};
    void dfs(int x,int y,int k)
    {
        int ok=1;
        rep(i,1,6)
        {
            x+=dx[k];
            y+=dy[k];
            if(mp[x][y]!=str[i]){ok=0;break;}
        }
        if(ok)
        {
            while(mp[x][y]!='y')
            {
                vis[x][y]=1;
                x-=dx[k];
                y-=dy[k];
            }
            vis[x][y]=1;
        }
    }
    
    int main()
    {
        RI(n);
        rep(i,1,n)
        RS(mp[i]+1);
        rep(i,1,n)
        rep(j,1,n)
        if(mp[i][j]=='y')
        rep(k,0,7)
        dfs(i,j,k);
        rep(i,1,n)
        {
            rep(j,1,n)
            if(!vis[i][j])printf("*");
            else printf("%c",mp[i][j]);
            cout<<endl;
        }
        return 0;
    }
  • 相关阅读:
    桥牌笔记:三个输墩压缩为一个
    读书笔记2013第7本:《杠杆阅读术》
    读书笔记2013第6本:《棋与人生》(一)
    《Two Dozen Short Lessons in Haskell》(二十)分数
    《Two Dozen Short Lessons in Haskell》学习(十八) 交互式键盘输入和屏幕输出
    Exercise: A Routine Day
    读书笔记2013第6本:《棋与人生》(二)
    读书笔记2013第8本:《超级快速阅读》
    TC的房子
    [转贴]Windows批处理调用程序后如何自动退出
  • 原文地址:https://www.cnblogs.com/bxd123/p/10614331.html
Copyright © 2011-2022 走看看