蓝桥杯赛迷宫_c++

题目描述

把一个 n 行 m 列的字符阵列看做一个迷宫,迷宫仅包含 L、Q、B、S 中的大写母(蓝桥杯赛的汉语拼音首字母)。初始时,你可以从任意一个“L”字母开始,移向相邻的“Q”字母,然后从此“Q”字母出发,移向相邻的“B”字母,然后从此“B”字母出发,移向相邻的“S”字母……。这样,你就算是走过了一个“LQBS”字符序列。接下来,仍然可以从此“S”字母出发,移向相邻的“L”字母……,重复上述的动作,你就可以不断地走过“LQBS”序列。请注意,所谓相邻仅包含上、下、左、右 44 个方向,且只能从 L->Q,从 Q->B,从B->S,从 S->L。可以想像,由于选择的出发点不同,我们有可能在迷宫中走过无数次的“LQBS”,或者是有限次的“LQBS”,或者一次也走不了。编程实现:请你编写程序,求出在给定的迷宫中,我们最多可以走过多少次“LQBS”?

输入格式

第一行:正整数 n,m,表示迷宫的规模为n 行 m 列;接下来的 n 行:每行 m 个符合题意的字母,字母间无空格。

输出格式

一个整数。即:如果在迷宫中可以无限次的走过“LQBS”,输出−1−1,否则,输出可以走过“LQBS”的最多次数

输入数据 1

1 2
LQ

Copy

输出数据 1

0

Copy

输入数据 2

3 3
LSB
QBQ
BSL

Copy

输出数据 2

-1

Copy

输入数据 3

4 4
BLQB
BBQS
SBQL
QQQQ

Copy

输出数据 3

2

Copy

数据规模与约定

对于 100%100% 的数据,0≤�,�≤1000≤n,m≤100。

正文部分:

暴力枚举吧(麻了)

#include<iostream>

#include<algorithm>

#include<fstream>

using namespace std;

const int N=110;

char g[N][N];

int f[N][N];

int n,m;

bool wuxian;

int mstep,step=1;

int dx[4]={0,1,0,-1},dy[4]={1,0,-1,0};

void dfs(int x,int y){

    for(int i=0;i<4;i++){

        int xx=x+dx[i],yy=y+dy[i];

        if(xx<0||xx>n-1||yy<0||yy>m-1)continue;

        if((g[x][y]=='L' && g[xx][yy]=='Q')||(g[x][y]=='Q' && g[xx][yy]=='B')||

        (g[x][y]=='B' && g[xx][yy]=='S')||(g[x][y]=='S' && g[xx][yy]=='L')){

            if(f[xx][yy]){

                wuxian=true;

                return ;

            }

            f[xx][yy]=1;

            step++;

            mstep=max(mstep,step);

            dfs(xx,yy);

            f[xx][yy]=0;

            step--;

        }  

    }

    return ;

}

int main()

{

    cin>>n>>m;

    for(int i=0;i<n;i++) cin>>g[i];

    for(int i=0;i<n;i++){

        for(int j=0;j<m;j++){

            if(g[i][j]=='L'){

                memset(f,0,sizeof(f));

                dfs(i,j);

            }

            if(wuxian){

                cout<<-1<<endl;

                return 0;

            }

        }

    }

    cout << mstep/4 << endl;

    return 0;

}

  • 10
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是一份可能的蓝桥杯前训练计划: 1. 熟悉考试内容和题型:了解蓝桥杯考试的内容和题型,包括编程语言、数据结构与算法、计算机基础知识和实践能力等方面的内容,并准备相关资料和练习题目。 2. 制定学习计划:根据自己的水平和时间安排,制定一份具体的学习计划,包括每天的学习目标、练习时间和计划完成时间等,以保证充分利用时间进行学习和练习。 3. 提高编程能力:进行编程练习,提高编程能力,特别是数据结构和算法的实践能力。可以参加在线编程竞、练习题目和刷题等方式来提高编程能力。 4. 提高计算机基础知识:学习计算机基础知识,包括计算机组成原理、操作系统、计算机网络、数据库等方面的知识,以提高程序的效率和优化能力。 5. 实践能力:进行实践练习,包括操作系统和网络配置、数据库设计和开发、Web开发等方面的实践,以提高实践能力和解决问题的能力。 6. 团队协作:参加团队协作项目,锻炼团队合作和沟通能力,同时学习项目管理和软件开发流程等相关知识。 7. 模拟考试:进行模拟考试,以检验自己的学习成果和考试准备情况,同时找出自己的弱点和不足,加以改进和提高。 8. 调整状态:保持良好的身体状态和心态,保证充足的睡眠和饮食,调整好心态,保持积极向上的心态。 以上是一份可能的蓝桥杯前训练计划,具体的训练计划需要根据个人情况和水平来制定。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值