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

     

     题目大意:

     找出沿一方向连续出现的“yizhong”,其他字符变成“*”

    思路:

    如果发现了这个单词的开头“y”,然后就dfs搜索,直到找到了yizhong整个单词。

    代码:

    #include<cstdio>
    #include<iostream>
    #include<algorithm>
    #include<cstring> 
    #include<cmath>
    using namespace std;
    long long n;
    char map[101][101];//表示N*N的字母矩阵 
    char ci[]="yizhong";
    long long dx[8]={1,1,0,1,0,-1,-1,-1};
    long long dy[8]={1,-1,1,0,-1,-1,1,0};//8个方位 
    long long bj[101][101];//标记数组 
    void dfs(long long idx,long long idy,long long jg,long long fx){
        if(jg==7){
            for(int i=1;i<=7;i++){ 
                bj[idx][idy]=1;//记录方位 
                idx-=dx[fx];//更新 
                idy-=dy[fx];//更新 
            }
            return;
        }
        else{   
            if(fx==-1){
                for(int i=0;i<8;i++){//枚举8个方位 
                    if(dx[i]+idx>=1&&dy[i]+idy>=1&&dx[i]+idx<=n&&dy[i]+idy<=n&&ci[jg]==map[dx[i]+idx][dy[i]+idy]){//判断是否越界,当前位置是否符合字母 
                        dfs(dx[i]+idx,dy[i]+idy,jg+1,i);//更新位置,继续搜索 
                    }
                }   
            }
            else{
                if(dx[fx]+idx>=1&&dy[fx]+idy>=1&&dx[fx]+idx<=n&&dy[fx]+idy<=n&&ci[jg]==map[dx[fx]+idx][dy[fx]+idy]){//判断是否越界,当前位置是否符合字母  
                    dfs(dx[fx]+idx,dy[fx]+idy,jg+1,fx);//更新位置,继续搜索
                }
            }
        }
    }
    int main(){
        scanf("%lld",&n);//输入 
        for(int i=1;i<=n;i++){    
            for(int j=1;j<=n;j++){
                cin>>map[i][j];//输入字母矩阵 
            }
        }
        for(int i=1;i<=n;i++){
            for(int j=1;j<=n;j++){
                if(map[i][j]=='y'){//如果找到了'y' 
                    dfs(i,j,1,-1);//dfs搜索 
                }
            }
        }
        for(int i=1;i<=n;i++){
            for(int j=1;j<=n;j++){
                if(bj[i][j]==1){
                    cout<<map[i][j];//输出 
                }
                else{
                    printf("*");
                }
            }
            printf("
    ");
        }
        return 0;
    }
  • 相关阅读:
    简单线程池的设计
    MFC开发--截图工具
    Win32小游戏--蜘蛛纸牌
    C++语言动态创建对象
    C++语言类之间的关系
    c++语言虚函数实现多态的原理(更新版)
    5-24 c++语言之【基础知识】
    小细节--关于printf的输出问题
    Win32小游戏--贪吃蛇
    2020北大夏令营 终末游记
  • 原文地址:https://www.cnblogs.com/shanxx/p/12894527.html
Copyright © 2011-2022 走看看