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

    DFS的例题,难点在于所选的yizhong必须是一行的不能拐弯,我第一次写的时候直接在DFS里的判断条件里加了if(当前位置的字符==yizhong相应位置的字符)这样的语句,当然这样不对,因为没有保证拐弯的问题。怎样去保证不拐弯呢,只需要定义一个八向的二维数组,然后寻找到y的时候再去找i找到i就把这个k传入进DFS以后方向就是这个k。因为已经定好了方向所以不用担心越界重复等问题,如果有问题直接return不会在相应的记录状态数组上记录。还有的问题就是要用char的二维数组我不知道为什么用string一个for一直错,让我还以为是算法错了

    经过试验发现数组可以保证有负数的下标而不终止程序,string不能忍受,所以在最开始的时候用string就会出现负数的下标

    代码 (算法借鉴)

    #include <bits/stdc++.h>
    using namespace std;
    int bk[110][110];
    char st[110][110];
    int dir[][2]={{-1,-1},{-1,0},{-1,1},{0,-1},{0,1},{1,-1},{1,0},{1,1}};
    char yz[]="yizhong";
    struct node
    {
        int x,y;
    }p[110];
    void dfs(int x,int y,int id,int k)
    {
        if(id==7)
        {
            for(int i=0;i<7;i++)
            bk[p[i].x][p[i].y]=1;
        }
        else
        {
            int xx=x+dir[k][0];
            int yy=y+dir[k][1];
            if(id==6||st[xx][yy]==yz[id+1])
            {
                p[id].x=x;p[id].y=y;
                dfs(xx,yy,id+1,k);
            }
        }
    }
    main()
    {
        //freopen("data.in","r",stdin); 
        int n;
        cin>>n;
        for(int i=0;i<n;i++)
        cin>>st[i];
        for(int i=0;i<n;i++)
        for(int j=0;j<n;j++)
        if(st[i][j]=='y')
        {
            for(int k=0;k<8;k++)
            {
                int x=i+dir[k][0];
                int y=j+dir[k][1];
                if(st[x][y]=='i')
                dfs(i,j,0,k);
            }
        }
        for(int i=0;i<n;i++)
        {
            for(int j=0;j<n;j++)
            {
                if(bk[i][j])
                cout<<st[i][j];
                else
                cout<<"*";
            }
            cout<<endl;
        }
    } 
    
  • 相关阅读:
    带最小值操作的栈 &#183; Min Stack
    删除排序数组中的重复数字 II · Remove Duplicates from Sorted Array II
    K组翻转链表 · Reverse Nodes in k-Group
    HTML DOM Style borderBottomLeftRadius 属性
    PHP For 循环
    PHP copy() 函数
    CSS border-left-color 属性
    ASP.NET Web Pages 文件夹
    no-empty-label (Rules) – Eslint 中文开发手册
    PHP ksort() 函数
  • 原文地址:https://www.cnblogs.com/baccano-acmer/p/9831769.html
Copyright © 2011-2022 走看看