首页 > 其他分享 >洛谷题单指南-搜索-P1101 单词方阵

洛谷题单指南-搜索-P1101 单词方阵

时间:2024-03-07 17:15:32浏览次数:18  
标签:字符 匹配 idx P1101 int 洛谷题 方向 方阵 yizhong

原题链接:https://www.luogu.com.cn/problem/P1101

题意解读:对于方阵中的每一个字符,在8个方向上判断是否和"yizhong"匹配,是一个递归问题。

解题思路:

用char a[N][N]存储所有字符方阵,用bool b[N][N]标记每个字符是否在任一方向上和yizhong匹配

遍历方阵每一字符,如果是'y'

则在8个方向上递归判断是否和"yizhong"匹配

如果匹配,更新每一个位置的b[i][j]=true

注意只要b[i][j]被更新为true,证明总在某一方向能匹配,如果后续遍历到该位置某个方向不匹配,也不能再重新更新为false

100分代码:

#include <bits/stdc++.h>
using namespace std;

const int N = 105;

const string YZ = "yizhong";
char a[N][N]; //字符数组
bool b[N][N]; //标记字符是否在任意方向上匹配上yizhong
int dx[8] = {-1, -1, 0, 1, 1, 1, 0, -1};
int dy[8] = {0, -1, -1, -1, 0, 1, 1, 1};
int n;

//从x,y开始,比较第idx个字符,方向为dir
bool dfs(int x, int y, int idx, int dir)
{
    if(idx == 6 && a[x][y] == YZ[idx])
    {
        return true; //如果比较到最后一个字符,说明该方向匹配
    } 

    if(a[x][y] != YZ[idx]) return false; //如果遇到不相等的字符,说明该方向不匹配

    int nx = x + dx[dir], ny = y + dy[dir];
    if(nx >= 1 && nx <= n && ny >= 1 && ny <= n)
    {
        bool res = dfs(nx ,ny, idx + 1, dir);
        if(res) b[nx][ny] = res; //如果匹配上,才更新标记,不能把之前匹配过的覆盖掉
        return res;
    }

    return false;
}

int main()
{
    cin >> n;
    for(int i = 1; i <= n; i++)
        for(int j = 1; j <= n; j++)
            cin >> a[i][j];
        
    for(int i = 1; i <=n; i++)
    {
        for(int j = 1; j <= n; j++)
        {
            if(a[i][j] == YZ[0])
            {
                for(int k = 0; k < 8; k++)
                {
                    bool res = dfs(i, j, 0, k); //只要有一个方向匹配,就要保留匹配的状态
                    if(res) b[i][j] = res;
                }    
            }
        }
    }

    for(int i = 1; i <= n; i++)
    {
        for(int j = 1; j <= n; j++)
        {
            if(b[i][j]) cout << a[i][j];
            else cout << "*";
        }
        cout << endl;
    }
}

 

标签:字符,匹配,idx,P1101,int,洛谷题,方向,方阵,yizhong
From: https://www.cnblogs.com/jcwy/p/18059291

相关文章

  • 洛谷题单指南-搜索-P1019 [NOIP2000 提高组] 单词接龙
    原题链接:https://www.luogu.com.cn/problem/P1019题意解读:要计算接龙能得到的最长字符串,可以通过DFS暴搜所有可能的接龙方案解题思路:DFS的关键在于两个判断:1、下一个单词是否可以和上一个单词接龙,最短公共长度是多少(只需要看两个单词的最短公共长度,这样能保证接龙更长)2、单词......
  • 洛谷题单指南-搜索-P1605 迷宫
    原题链接:https://www.luogu.com.cn/problem/P1605题意解读:从起点走到终点的方案数,DFS可遍历所有情况。解题思路:在DFS过程中,有两种标记墙:不能访问已访问过的,不能重复访问定义数组inta[N][N]表示迷宫,1是墙或者已访问过的,0是可以通过的。100分代码:#include<bits/stdc++.h>......
  • 洛谷题单指南-搜索-P1433 吃奶酪
    原题链接:https://www.luogu.com.cn/problem/P1433题意解读:计算经过所有奶酪一次的总路径最短,可以采用dfs、dp等方法。解题思路:最直接的思路是DFS,暴搜所有的路径方案,计算最小距离,n最大是15,复杂度为15!≈10^12,必定会超时,先保证正确性,得到部分分:50分代码:#include<bits/stdc++.h......
  • 洛谷题单指南-搜索-P2895 [USACO08FEB] Meteor Shower S
    原题链接:https://www.luogu.com.cn/problem/P2895题意解读:所谓安全格子,就是在所有流星坠落之后,没有被烧焦的格子,要计算从起点到这些格子任一一个的最短路径,BFS可以解决。解题思路:1、读取数据,先把所有流星坠落点以及周围被烧焦的格子进行标记,得到安全格子2、从起点开始BFS,每走......
  • 洛谷题单指南-搜索-P1135 奇怪的电梯
    原题链接:https://www.luogu.com.cn/problem/P1135题意解读:计算A到B至少要按几次电梯,本质上就是求A到B的最短路径,可以通过BFS解决。解题思路:位于每一层,有两种选择:向上、向下BFS搜索直接从A找到B,每扩展一层,层数+1,层数即按电梯次数100分代码:#include<bits/stdc++.h>usingnam......
  • 洛谷题单指南-搜索-P1443 马的遍历
    原题链接:https://www.luogu.com.cn/problem/P1443题意解读:无论是国际象棋还是中国象棋,马的活动范围都是一样的:只不过国际象棋棋子是在格子中,中国象棋棋子是在交点,坐标的变化方式是一样的,根据此活动范围,计算马到达每一个点的最短路径。解题思路:根据马的活动范围,在棋盘内进行B......
  • 洛谷题单指南-搜索-P2392 kkksc03考前临时抱佛脚
    原题链接:https://www.luogu.com.cn/problem/P2392解题思路:参考https://www.cnblogs.com/jcwy/p/18003097前面已经给出了二进制法的代码,这里给出DFS的代码100分代码:#include<bits/stdc++.h>usingnamespacestd;constintN=25;ints1,s2,s3,s4;inta[N],b[N],c[......
  • 洛谷题单指南-搜索-P1219 [USACO1.5] 八皇后 Checker Challenge
    原题链接:https://www.luogu.com.cn/problem/P1219题意解读:八皇后,经典回溯问题。解题思路:逐行摆放棋子,关键在于如何快速判断行、列、正斜(左上到右下)、反斜(右上到左下)方向没有已放其他棋子1、由于逐行摆放,因此行不需要判断通过一个boolcol[N]数组即可判断列上是否已摆放其他棋......
  • 洛谷题单指南-二分查找与二分答案-P3743 kotori的设备
    原题链接:https://www.luogu.com.cn/problem/P3743题意解读:设备使用的时间越久,需要充电的总时间也越多,具备单调性,根据使用的时间,计算需要充电的时间,如果充电总时间<=使用的时间,说明有电量还能富余,使用时间还可以更多,因此只需对使用时间进行二分即可。解题思路:给定设备使用的时间......
  • 洛谷题单指南-二分查找与二分答案-P1163 银行贷款
    原题链接:https://www.luogu.com.cn/problem/P1163题意解读:利率越小,贷款期限和每个月还的钱固定的情况下,越有可能能够还完全部的贷款,具备单调性,因此给定贷款利率、贷款月数、每月还款钱数,可以计算最终贷款还剩下多少,有两种情况:>=0,说明利率可能大了,要试探更小利率;<0,说明利率小了,要......