• 单词方阵-(棋盘问题)


    单词方阵 - 洛谷


    解题思路:

    (1)本题更加符合方向数组类型,只是简单的利用一下搜索的思路,根据题意,要求将单词“yizhong”所在的位置的字符输出出来,其他都是输出*号

    (2)那么可以设置一个地图数组a,和一个标记数组vis,用来标记这个位置输出字符还是*号,那么什么时候开始搜索判断呢?当然是找到第一个字符y的时候开始搜索

    (3)可以从该点的八个方向,依次进行搜索,所以需要设置一个行列的方向数组偏移量,然后判断一下,沿着该方向到底有没有这个单词。

    (4)如何判断剩余位置的字符是不是和这个单词的字符一一对应呢,我们可以把方向数组的偏移量依次*整数倍,然后初始化一个字符数组专门放单词。如果中间发生了越界,或者有字符不相等,那么在这个方向上,便没有这个单词,继续判断下一个方向

    (5)如果出现了这个单词,那么就将这隔单词中每个字符的位置都标记为1,(方便输出)

    (6)所以这道题代码不难,因为方向确定好了,那么再想想,如果可以不是一个方向上连续组成的单词,那么应该如何搜索呢?


    1. #include
    2. using namespace std;
    3. int n;
    4. char a[110][110];//字符地图
    5. char b[15]={'y','i','z','h','o','n','g'};//寻找的单词
    6. bool vis[110][110];//标记哪些字符输出
    7. int dx[10]={-1,1,0,0,-1,-1,1,1};//表示行号的方向数组
    8. int dy[10]={0,0,-1,1,-1,1,1,-1};//表示列号的方向数组
    9. void dfs(int x,int y)
    10. {
    11. for(int i=0;i<=7;i++)
    12. {
    13. bool flag=1;//打标记,判断该方向是否有这个单词
    14. for(int j=1;j<=6;j++)//将剩余的单词一一比较
    15. {
    16. int xx=x+dx[i]*j;//形成新的行号
    17. int yy=y+dy[i]*j;//形成新的列号
    18. if(xx>n||xx<1||yy>n||yy<1)//如果有越界的话
    19. {
    20. flag=0;
    21. break;//结束循环
    22. }
    23. if(a[xx][yy]!=b[j])//如果有字符不等的话
    24. {
    25. flag=0;
    26. break;//退出循环
    27. }
    28. }
    29. if(flag==1)//如果该方向上有这个单词
    30. {
    31. for(int j=0;j<=6;j++)//将这七个单词的位置全部赋值为1
    32. {
    33. int xx=x+dx[i]*j;
    34. int yy=y+dy[i]*j;
    35. vis[xx][yy]=1;
    36. }
    37. }
    38. }
    39. }
    40. int main()
    41. {
    42. cin>>n;
    43. for(int i=1;i<=n;i++)
    44. for(int j=1;j<=n;j++)
    45. cin>>a[i][j];//输入字符地图
    46. for(int i=1;i<=n;i++)//遍历每个字符
    47. {
    48. for(int j=1;j<=n;j++)
    49. {
    50. if(a[i][j]=='y')//如果发现了是字符y
    51. {
    52. dfs(i,j);//开始搜索
    53. }
    54. }
    55. }
    56. for(int i=1;i<=n;i++)//打印字符
    57. {
    58. for(int j=1;j<=n;j++)
    59. {
    60. if(vis[i][j]==0)//如果标记是0的话
    61. cout<<"*";
    62. else//如果标记是1的话
    63. cout<
    64. }
    65. cout<
    66. }
    67. return 0;
    68. }

  • 相关阅读:
    C#版字节跳动SDK - SKIT.FlurlHttpClient.ByteDance
    844. 比较含退格的字符串
    手把手基于YOLOv5定制实现FacePose之《YOLO结构解读、YOLO数据格式转换、YOLO过程修改》
    RK3568 Android11 默认打开网络ADB
    Spring源码分析之事物管理
    Docker 安装redis
    【浅学Java】三次握手 / 四次挥手
    9.吴恩达深度学习--机器翻译
    CocosCreater学习1
    云计算 - 3 - 使用MapReduce处理数据
  • 原文地址:https://blog.csdn.net/weixin_60869516/article/details/127431368