• 单词方阵(dfs)


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

    输入:

    8                    输出:
    qyizhong      *yizhong
    gydthkjy       gy******
    nwidghji       n*i*****
    orbzsfgz       o**z****
    hhgrhwth      h***h***
    zzzzzozo      z****o**
    iwdfrgng       i*****n*
    yyyygggg     y******g
    输入输出格式
    输入格式:
    第一行输入一个数n。(7<=n<=100)。

    第二行开始输入nXn的字母矩阵。

    输出格式:
    突出显示单词的nXn矩阵。

    输入输出样例
    输入样例#1:

    7

    aaaaaaa

    aaaaaaa

    aaaaaaa

    aaaaaaa

    aaaaaaa

    aaaaaaa

    aaaaaaa
    输出样例#1:

    #######

    #######

    #######

    #######

    #######

    #######

    #######

    典型的深搜,就是过程有点麻烦,先规定一个字符串yizhong,深度每增加1,对应字符串位置加一。
    AC代码;
    #include <bits/stdc++.h>
    
    using namespace std;
    
    int c[110][110]={0};
    
    char bb[30]="yizhong";
    
    int b[110][2]={0};
    
    int n;
    
    char a[110][110];
    
    void dfs(int x,int y,int t,int fang)//fang是记录方向;t记录深度;
    
    {
    
        if(t==7)//代表成功,用C字符串记录;
        {
            for(int i=0;i<7;i++)
            {
                c[b[i][0]][b[i][1]]=1;
            }
        }
        else
        {
        if(fang==1)
        {
             if(x-1>=0&&y-1>=0&&a[x-1][y-1]==bb[t])
             {
                 b[t][0]=x-1;
                 b[t][1]=y-1;
                 dfs(x-1,y-1,t+1,fang);
             }
        }
        else if(fang==2)
        {
             if(y-1>=0&&a[x][y-1]==bb[t])
             {
                 b[t][0]=x;
                 b[t][1]=y-1;
                 dfs(x,y-1,t+1,fang);
             }
        }
        else if(fang==3)
        {
             if(y+1<n&&x+1<n&&a[x+1][y+1]==bb[t])
             {
                 b[t][0]=x+1;
                 b[t][1]=y+1;
                 dfs(x+1,y+1,t+1,fang);
             }
        }
        else if(fang==4)
        {
             if(x+1<n&&a[x+1][y]==bb[t])
             {
                 b[t][0]=x+1;
                 b[t][1]=y;
                 dfs(x+1,y,t+1,fang);
             }
    
        }
        else if(fang==5)
        {
             if(y-1>=0&&x+1<n&&a[x+1][y-1]==bb[t])
             {
                 b[t][0]=x+1;
                 b[t][1]=y-1;
                 dfs(x+1,y-1,t+1,fang);
             }
        }
        else if(fang==6)
        {
            if(y+1<n&&a[x][y+1]==bb[t])
             {
                 b[t][0]=x;
                 b[t][1]=y+1;
                 dfs(x,y+1,t+1,fang);
             }
        }
        else if(fang==7)
        {
             if(y+1<n&&x-1>=0&&a[x-1][y+1]==bb[t])
             {
                 b[t][0]=x-1;
                 b[t][1]=y+1;
                 dfs(x-1,y+1,t+1,fang);
             }
        }
        else if(fang==8)
        {
            if(x-1>=0&&a[x-1][y]==bb[t])
             {
                 b[t][0]=x-1;
                 b[t][1]=y;
                 dfs(x-1,y,t+1,fang);
             }
        }
        }
    
    }
    
    int main()
    {
    
       scanf("%d",&n);
       
       for(int i=0;i<n;i++)
       
       {
       
           scanf("%s",&a[i]);
       }
       
       
       for(int i=0;i<n;i++)
       
       {
       
           for(int j=0;j<n;j++)
           {
               if(a[i][j]=='y')
               {
                   b[0][0]=i;//这里要把第一个位置标记一下,因为dfs函数没记录第一个;
                   b[0][1]=j;
                   for(int w=1;w<=8;w++)
                   {
                       dfs(i,j,1,w);
                   }
               }
           }
       }
    
    
       for(int i=0;i<n;i++)
       
       {
       
           for(int j=0;j<n;j++)
           {
               if(c[i][j]==0)
               {
                   printf("*");
               }
               else
               {
                   printf("%c",a[i][j]);
               }
           }
           printf("
    ");
       }
        return 0;
    }
    View Code
  • 相关阅读:
    win10下的MyEclipse2017 ci7 破解教程+全套资源+失败处理(转)
    layui layer.open() 弹层开启后 Enter回车 遮罩层无限弹处理
    layui 或者layer 父页面获取子页面数据 或者子页面获取父页面操作方法(转)
    layui弹出层两个以上置顶弹出
    div自动获焦并将光标定位到最后
    hibernate 的SessionFactory的getCurrentSession 与 openSession() 的区别
    形参与实参的区别
    linux下安装Mysql(干货!!!)解决mysql 1130问题,远程登录问题
    linux下安装Mysql(干货!!!)
    java文件上传与下载
  • 原文地址:https://www.cnblogs.com/xiaolaji/p/9124994.html
Copyright © 2020-2023  润新知