
第三章
文章平均质量分 51
sigd
这个作者很懒,什么都没留下…
展开
-
19120 病毒扩散
解题思路:多起点的bfs问题。由于有步数限制,因此需要在入队前后做下步数检查。#include <bits/stdc++.h>typedef long long ll;using namespace std;struct node{ int x,y;};int n,m,X,v[1005][1005];int dx[8]= {0,0,1,-1,1,1,-1,-1};int dy[8]= {1,-1,0,0,1,-1,1,-1};char a[1005][100...原创 2022-04-10 16:25:40 · 603 阅读 · 0 评论 -
18276 走迷宫 的DFS写法
18276 走迷宫Description有一个N*M的格子迷宫,1代表该格子为墙,不能通过,0代表可以通过,另外,在迷宫中有一些传送门,走到传送门的入口即会自动被传送到传送门的出口(一次传送算1步)。人在迷宫中可以尝试上下左右四个方向移动。现在给定一个迷宫和所有传送门的出入口,以及起点和终点,问最少多少步可以走出迷宫。如果不能走出迷宫输出“die”。输入格式该程序为多CASE,第1行为CASE的数量每一个CASE,第1行为两个数N(行)和M(列)然后N行每行M个数之后是一个数W,为传送门原创 2021-06-02 21:49:04 · 720 阅读 · 1 评论 -
19070 音响外放
解题思路:做题要训练暴力枚举的能力。能想出暴力的解法就是胜利~~先看数据。n范围比较小,所以可以用DFS(递归实现指数型枚举)得到每一个人所有的可能得到时间,总数最大不超过1024。这样用数组分别存储4个人的所有可能时间。此时可以四层循环枚举所有可能,当然这么做必然超时。发现此题目枚举是有条件可利用,即四个人最大最小差距尽可能小。因此,总会有一个人,他选择的曲子是四个人中最短的。我们可以先假设第1个人选择的曲子长度X一定是所有人里面最小时间(X最多1024种可能),那么其他人一定比第1个人的...原创 2022-03-29 18:01:34 · 544 阅读 · 0 评论 -
递归与分形问题
分形,具有以非整数维形式充填空间的形态特征。通常被定义为“一个粗糙或零碎的几何形状,可以分成数个部分,且每一部分都(至少近似地)是整体缩小后的形状”,即具有自相似的性质。鉴于“整体缩小后的形状”这一特性,分形问题几乎都是用递归算法来处理。本文将用三个例子,由浅入深介绍分形问题的解决思路与规律。(一)OJ 18931 分形解题思路:题意明确告知,规模N的图形由5个规模N-1的图形组成,因此只要构造了N-1的图形,按某种规律即可得到规模N的图形。因此,分形问题的本质是发现N和N-1之间的..原创 2022-03-20 23:03:41 · 1929 阅读 · 0 评论 -
18715 出栈序列
解题思路:出栈序列字典序最大,可以很自然想到应该让最大的n第一个进栈再出栈,然后面临两个选择(1)继续出栈顶元素(2)继续入栈元素。为了让字典序更大,应该在两种选择中选到值更大的元素。因此算法设计时每次出栈前都要判断(1)和(2)的最大值,决定是入栈还是出栈。实现算法时可以把第一个元素n也作为一般情况处理,具体请参看代码。#include <iostream>using namespace std;int a[10005],n,s[100005],top=0;/**< s...原创 2022-03-16 22:04:21 · 927 阅读 · 0 评论 -
19009 后缀表达式
为了简单,此题目设计时限定所有数字均小于10。解题思路:逆波兰式即后缀表达式,是栈结构的典型应用之一。在扫描字符串的过程中,只有两种处理方式,数字入栈,运算符出栈顶两个元素,计算结果入栈。#include <iostream>#include <stack>using namespace std;string s;stack <long long> st;/**< STL提供的栈结构 */int main(){ long lon...原创 2022-03-16 22:32:01 · 402 阅读 · 1 评论 -
18714 迷宫问题
(一)迷宫问题简述迷宫问题属于搜索算法,一般情况下采用广度优先搜索,广搜不但能判断能否走出,还能求出迷宫的最短路径。仅在一些特殊情况下才会使用DFS算法,例如行走过程中可以通过某种手段改变迷宫状态(比如有魔法棒可以拆掉一个障碍)、迷宫格子间具有某种特殊关系、走迷宫的另一个目的是为了获取分数等等。18714 迷宫问题 属于迷宫裸题,仅用来训练基础DFS算法。(二)迷宫算法三要素:1、表示迷宫的数据结构根据题目要求,一般迷宫都是用二维数组,偶见三维迷宫。读取的数据形式比较多,有些题目用*..原创 2022-03-24 23:33:32 · 1279 阅读 · 2 评论 -
递归算法实现指数型枚举、组合、排列
递归算法(英语:recursion algorithm)在计算机科学中是指一种通过重复将问题分解为同类的子问题而解决问题的方法。递归式方法可以被用于解决很多的计算机科学问题,因此它是计算机科学中十分重要的一个概念。绝大多数编程语言支持函数的自调用,在这些语言中函数可以通过调用自身来进行递归。计算理论可以证明递归的作用可以完全取代循环,因此在很多函数编程语言(如Scheme)中习惯用递归来实现循环。递归形式的应用范围是非常广泛的,我们常说的深度优先搜索DFS算法就是用递归形式实现的,本文仅介绍涉及枚举的原创 2022-03-22 18:33:57 · 1361 阅读 · 1 评论 -
BFS算法简介
一、算法简介广度优先算法(Breadth-First-Search),简称BFS。从知识点看属于图结构的搜索算法,是一种相对容易理解的简单算法。BFS算法从问题的初始状态(起点)出发,根据状态转换规则(图结构中的边),遍历所有可能的状态(其他节点),直到找到终结状态(终点)。因此BFS算法的复杂度和状态集合的总数密切相关。BFS算法虽然出自图结构,但其常用的领域却不是解决图论相关问题。一些常见的问题形式如(1)走迷宫最短路径(2)数字按规则转换的最少...原创 2022-04-01 10:17:55 · 25211 阅读 · 1 评论