首页 > 其他分享 >蓝桥杯 迷宫

蓝桥杯 迷宫

时间:2022-12-31 21:02:43浏览次数:53  
标签:dist int 迷宫 蓝桥 newx newy &&

#include <bits/stdc++.h>
using namespace std;
char a[40][60];                                                 //存图
int nextx[4] = { 1,0,0,-1 }, nexty[4] = { 0,-1,1,0 };           //D<L<R<U      字典序直接把方向数组处理好就可以了
int dist[40][60];                                               //定义一个dist数组,用来存放各点到终点的最短距离
char dir[4] = { 'D','L','R','U' };                             
bool check(int x, int y) {
    return x > 0 && y > 0 && x <= 50 && y <= 50 && a[x][y] == '0'&&dist[x][y] == -1;
}
void bfs() {                                                    //BFS扫一遍,求出各点到终点的最短距离
    queue<pair<int, int> >q;
    memset(dist, -1, sizeof(dist));
    dist[30][50] = 0;
    q.push({ 30,50 });
    while (!q.empty()) {
        pair<int ,int> t = q.front();
        q.pop();
 
        for (int i = 0; i < 4; i++) {
            int newx = t.first + nextx[i];
            int newy = t.second + nexty[i];
            if (check(newx, newy)) {
                dist[newx][newy] = dist[t.first][t.second] + 1;
                q.push({ newx,newy });
            }
        }
 
    }
}
 
int main() {
 
    for (int i = 1; i <= 30; i++)
        for (int j = 1; j <= 50; j++)
            cin >> a[i][j];
    bfs();
 
    int x = 1, y = 1;                                                                       //从起点开始遍历
    string res;                                                                             //存答案
    while (x != 30 || y != 50) {
        for (int i = 0; i < 4; i++) {
            int newx = x + nextx[i];
            int newy = y + nexty[i];
            if (newx > 0 && newy > 0 && newx <= 50 && newy <= 50 && a[newx][newy] == '0'&&dist[newx][newy]==dist[x][y]-1) {
                x = newx, y = newy;
                res += dir[i];
                break;
            }
        }
    }
    cout << res << "\n";
    return 0;
}

题目链接:迷宫 - 蓝桥云课 (lanqiao.cn)

标签:dist,int,迷宫,蓝桥,newx,newy,&&
From: https://www.cnblogs.com/8023yyl/p/17017243.html

相关文章

  • 蓝桥杯12021
    卡片 1#include<iostream>2#include<cmath>3#include<algorithm>4#include<iomanip>5usingnamespacestd;6intcnt[10]={0};7intmain(){......
  • 蓝桥杯2021
    空间小蓝准备用256MB的内存空间开一个数组,数组的每个元素都是32位二进制整数,如果不考虑程序占用的空间和维护内存需要的辅助空间,请问256MB的空间可以存储多少个32......
  • 蓝桥杯——想不到的位运算
    一、前言笔者准备参加蓝桥杯,所以再次记录自己的学习心得。我会将自己的算法学习之路用博客进行记录,并将学习思想进行分享。希望大家如果看文章的话,可以认真阅读题目,并......
  • [蓝桥杯 2013 省 A] 剪格子
    [蓝桥杯2013省A]剪格子注意事项:读入顺序为m,n#include<iostream>usingnamespacestd;constintN=11;intn,m;intw[N][N];intdx[4]={-1,0,1,0}......
  • 郑轻 1397 迷宫问题
     题目描述ACM是一个喜欢玩游戏的小孩,他喜欢玩智力游戏,比如最近在玩走迷宫,这是一款超级耗费脑细胞的游戏。和普通的走迷宫一样,游戏是一张迷宫图,其中有一些标记,'W'是......
  • 卡片— 蓝桥杯(简单)
    importjava.util.Scanner;//1:无需package//2:类名必须Main,不可修改publicclassMain{publicstaticvoidmain(String[]args){inti=2021;......
  • 蓝桥-13届-C++-B组-省赛-G题-积木画
    直达链接当时第一眼看到觉得题型挺眼前一亮的,但是怎么做,没想法,也不明白考点在哪里画布高度固定是2,但是积木可以任意旋转,可以说L型只能和自己组合怎么用编程解决空间问题......
  • 蓝桥杯练习
    一、题目现在要从5位数的十进制数字中找出各个数位之和等于n的回文数字输入格式:输入一个整数n输出格式输出所有各个数位之和等于n的5位数,数字按从小到大的数序排列样例输入......
  • P8752 [蓝桥杯 2021 省 B2] 特殊年份 题解
    题目传送门题目大意输入\(5\)个年份,请计算这里面有多少个千位和十位相等,个位比百位大\(1\)的年份。解题思路将每一个年份按分离数位规则把每一位都分离,赋给\(a,......
  • 蓝桥-13届-C++-B组-省赛-F题-统计子矩阵
    直达链接主要解题思路分为两个部分,1是构造二维前缀和计算矩阵和,降低每次求和的时间复杂度;2是对所有子矩阵的遍历求和过程,因为需要两个坐标,遍历4个行/列值,4层for循环时间复......