• 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;
    }
  • 相关阅读:
    js 添加事件 attachEvent 和 addEventListener 的用法
    zepto的tap事件的点透问题的几种解决方案
    CSS3弹性盒模型flexbox完整版教程
    移动端的几款jq插件
    CSS3阴影 box-shadow的使用
    offset
    事件驱动
    mysql处理重复数据仅保留一条记录
    k8s ingress路由强制跳转至https设置
    linux查看进程数
  • 原文地址:https://www.cnblogs.com/shanxx/p/12894527.html
Copyright © 2020-2023  润新知