dfs练习(二)

DFS练习-迷宫(最短路径)问题详解 一波三折 图片+文字 dfs迷宫问题的详细解析,图文并茂,包含洛谷acwing上的两题。 阅读详情

题目:Soldier and Cards

代码:

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

const int maxn = 1e5+10;
queue<int>s, t;
map<queue<int>, queue<int> >mp;
int main(){
    int n, k1, k2;
    scanf("%d", &n);
    scanf("%d", &k1);
    for(int i = 1; i <= k1;i++){
        int v;
        scanf("%d", &v);
        s.push(v);
    }
    //if(mp[s] == t)cout<<"jkjk"<<endl;
    scanf("%d", &k2);

    for(int i = 1; i <= k2; i++){
        int v;
        scanf("%d", &v);
        t.push(v);
    }
    mp[s] = t;
    //cout<<s.size()<<" "<<t.size()<<endl;
    int flag = 0;
    int cn = 0;
    while(s.size() != n && s.size() != 0){
        int x, y;
        x = s.front();
        y = t.front();
        s.pop(), t.pop();
        if(x > y){
            s.push(y);
            s.push(x);
        }
        else {
            t.push(x);
            t.push(y);
        }
        cn++;
        if(mp.count(s) && mp[s] == t){//一定要使用mp.count,因为mp映射的队列默认位空队列,所以当s之前没有出现过,并且t位空的时候使结果出现问题
            flag = 1;
            break;
        }
        mp[s] = t;
    }
    if(flag)printf("-1\n");
    else {
            printf("%d ", cn);
            if(!s.size())printf("2\n");
            else printf("1\n");
    }


return 0;
}

Divide by three, multiply by two

代码:

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

const int maxn = 200;
#define LL unsigned long long

LL a[maxn], mark[maxn], r[maxn];
map<LL, int>vis;
int n, cn;

int dfs(LL x, int step)
{
    if(step == n - 1)
    {
        cn = step;
        for(int i = 0; i < n; i++)
        {
            r[i] = mark[i];
        }
        return 1;
    }
    if(x % 3 == 0 && vis[x/3])
    {
        mark[step] = x/3;
        if(dfs(x/3, step+1))return 1;

    }

    if(vis[x*2])
    {
        mark[step] = x*2;
        if(dfs(x*2, step+1)) return 1;
    }
    return 0;
}
int main()
{
    scanf("%d", &n);
    vis.clear();
    for(int i = 1; i <= n; i++)
    {
        scanf("%llu", &a[i]);
        vis[a[i]]++;
    }
    for(int i = 1; i <= n; i++)
    {
        cn = 0;
        if(dfs(a[i], 0))
        {
            printf("%llu", a[i]);
            for(int i = 0; i < cn; i++)
            {
                printf(" %llu", r[i]);
            }
            printf("\n");
        }
    }

    return 0;
}

题目:Mahmoud and Ehab and the bipartiteness

代码:

#include<bits/stdc++.h>
using namespace std;
#define LL long long
const int maxn = 2e5+10;
int vis[maxn], n;
int tot = 1, head[maxn], Next[maxn], to[maxn];
void add(int u, int v){
     to[tot] = v;
     Next[tot] = head[u];
     head[u] = tot++;
}
void dfs(int x, int fa, int status){

     for(int i = head[x]; i; i = Next[i]){
        int v = to[i];
        if(v == fa)continue;
        if(status)vis[v] = 1;
        else vis[v] = 2;
        //cout<<v<<endl;
        dfs(v, x ,!status);
     }

}
int main(){
    scanf("%d", &n);
    tot = 1;
    for(int i = 1; i < n; i++){
        int u, v;
        scanf("%d %d", &u, &v);
        add(u, v);
        add(v, u);

    }
    int root;


    vis[1] = 1;
    dfs(1,-1,0);
    LL cn = 0;
    for(int i = 1; i <= n; i++){
        if(vis[i] == 1)cn++;
    }
    printf("%lld\n", (1LL)*cn*(n-cn)-n+1);

return 0;
}

题目: News Distribution

并查集
不知道用递推的方法为什么会超时,用递归的方法反而没有超时
代码:

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

const int maxn = 5e5+10;
int f[maxn], sz[maxn], vis[maxn];
inline int read(){
   int s=0,w=1;
   char ch=getchar();
   while(ch<'0'||ch>'9'){if(ch=='-')w=-1;ch=getchar();}
   while(ch>='0'&&ch<='9') s=s*10+ch-'0',ch=getchar();
   return s*w;
}
int Find(int x)//查询根
{
    if(f[x]==x)
        return x;
    else
        return f[x] = Find(f[x]);
}
void init(int n){
     for(int i = 1; i <= n; i++){
        sz[i] = 1;
        f[i] = i;
     }
}
int main(){
    int n, m;
    n = read(), m = read();
    init(n);
    for(int i = 1; i <= m; i++){
        int k, v, pre;
        k = read();
        for(int j = 1; j <= k; j++){
            v = read();
            if(j == 1){
                    pre = v;
                    continue;
            }
            int xx = Find(pre), yy = Find(v);
            if(xx == yy)continue;
            sz[xx] += sz[yy];
            f[yy] = xx;
        }
    }
    for(int i = 1; i <= n; i++){
        vis[i] = sz[Find(i)];
        printf("%d ", vis[i]);
    }
    printf("\n");

return 0;
}


随机迷宫生成算法——深度优先算法 迷宫是我们小时候经常玩的游戏,如何用代码来快速生成上面这种迷宫呢? 迷宫算法有三大算法:深度优先算法、prim算法和递归分割算法。这里用的是深度优先算法,在此说一下算法思路,希望对各位有所帮助。 首先我的假设是,迷宫只有一条正确的道路。 这个时候请把自己想象成一只地鼠,要在这个区域不停的挖,直到任何一块区域再挖就会挖穿了为止。 我们挖的道路就像树结构,树上有很多的分支,分支也有子... 阅读详情

相关推荐

深度优先算法和广度优先算法

今天做了daoti

solar一抹阳光的专栏 8441

计蒜客-中国象棋(DFS)

中国象棋博大精深,其中马的规则最为复杂,也是最难操控的一颗棋子。 我们都知道象棋中马走"日",比如在 (2,4)(2, 4)(2,4) 位置的一个马,跳一步能到达的位置有 (0,3)(0, 3)(0,3),(0,5)(0, 5)(0,5),(1,2)(1, 2)(1,2),(1,6)(1, 6)(1,6),(3,2)(3, 2)(3,2),(3,6)(3, 6)(3,6),(4,3)(4, 3)(4,3),(4,5)(4, 5)(4,5)。 蒜头君正在和花椰妹下棋,蒜头君正在进行战略布局,他需要把在 (x

qq_43531919的博客 1820

10分钟教你用python动画演示深度优先算法搜寻逃出迷宫的路径

@本文来源于公众号:csdn2299,喜欢可以关注公众号 程序员学府 深度优先算法(DFS 算法)是什么? 寻找起始节点与目标节点之间路径的算法,常用于搜索逃出迷宫的路径。主要思想是,从入口开始,依次搜寻周围可能的节点坐标,但不会重复经过同一个节点,且不能通过障碍节点。如果走到某个节点发现无路可走,那么就会回退到上一个节点,重新选择其他路径。直到找到出口,或者退到起点再也无路可走,游戏结束。当然,...

python函数基础教程 2187

dfs练习

任何一个大于 11 的自然数 n,总可以拆分成若干个小于 n 的自然数之和。现在给你一个自然数 n,要求你求出 n 的拆分成一些数字的和。一个网格与其周围的八个网格相连,而一组相连的网格视为一个水坑。一个如下的 6×6 的跳棋棋盘,有六个棋子被放置在棋盘上,使得每行、每列有且只有一个,每条对角线(包括两条主对角线的所有平行线)上至多有一个棋子。由于近期的降雨,雨水汇集在农民约翰的田地不同的地方。c.行走后若为“W”则转化为“.”并继续走,若为“.”则直接return。第四行只有一个数字,表示解的总数。

hm_x02的博客 996

c++深度优先搜索DFS

深度优先搜索,又叫DFS,是遍历图或者数的一种算法,本质就是递归。具体方法:先以一个节点为起点,向一个方向扩展,再以新的节点为起点,向一个方向扩展,直到这个方向不满足条件,或者到达这个方向的最深,再往回走,叫做回溯。然后扩展另一个方向,知道整个图都遍历完成。所以叫做深度优先搜索。这种算法极其重要,是每一个会编程的人都必须掌握的一种算法。因为许多东西都可以用它来实现。比如树的遍历,图的遍历,全排列。而且很多题目,如果你不会或者想不出正解,就可以用深搜暴力一下,也能骗得部分分。

zhaoniuniu0309的博客,刚刚开始写博文的新手,有不对的地方请谅解。 2710

递归回溯深度优先搜索DFS练习题(含C++源码)

# 递归回溯深度优先搜索DFS算法练习题 C++ 含源码 包含题目:《过河卒》《出栈序列统计》《算24点》《冗余依赖》《走迷宫》《单项双轨道》《组合的输出》《售货员的难题》《驾车旅游》《关路灯》

12 30数据结构与dfs,bfs练习

12 30

m0_73955064的博客 172

博途 V16(TIA portal V16)安装教程

本文提供了西门子TIA Portal V16软件的完整安装指南。内容包括百度网盘下载链接(提取码kv69)、详细安装步骤(关闭安全保护、典型安装设置)、授权破解方法,以及PLCSIM仿真功能的使用说明。重点演示了S7-1200 PLC程序的仿真过程,解析了仿真界面各元素功能,包括状态指示灯(RUN/STOP/ERROR)、操作按钮(RUN/STOP/MRES)和网络接口状态等。通过图文并茂的方式,完整呈现了从软件安装到PLC程序仿真的全流程操作。

lingchen1906的博客 6663

DFS例题

深度优先遍历和广度优先遍历:可参考 深度优先遍历和广度优先遍历 数独游戏: 你一定听说过“数独”游戏。 如下图所示,玩家需要根据9×9盘面上的已知数字,推理出所有剩余空格的数字,并满足每一行、每一列、每一个同色九宫内的数字均含1-9,不重复。 数独的答案都是唯一的,所以,多个解也称为无解。 本图的数字据说是芬兰数学家花了3个月的时间设计出来的较难的题目。但对会使用计算机编程的你来说,恐怕...

曹世宏的博客 2948

RYU+Mininet的SDN架构-设计校园网络(一)

现有一个中学,需要设计一个中小型网络满足学校的网络需求。学校有教学区,实验室区域和服务器区域。教学区为了满足接入的灵活性和信号强度要求,需要满足设计WIFI满足日常教室和同学需求,接入上限为200人。实验室区域需要有一台教师主机方便管理实验室其余电脑,并且教师主机可以访问学校服务器,方便为同学们实验室授课。学校服务器区域设有学校相关重要文件和学校网页相关内容。最后学校还会接入互联网。

weixin_53284122的博客 8034

YoloV10改进策略:卷积篇|基于PConv的二次创新|附结构图|性能和精度得到大幅度提高(独家原创)

在PConv的基础上做了二次创新,创新后的模型不仅在精度和速度上有了质的提升,还可以支持Stride为2的降采样。改进方法简单高效,需要发论文的同学不要错过!

m0_47867638的博客 1094

算法练习(二)排列组合--DFS深度优先

深度优先算法

qq_44648936的博客 205

用Python爬取政府采购信息的实战全流程

以 Playwright 自动采集政府采购信息结构化存储与查询可拓展关键词过滤与通知机制。

2201_76125261的博客 1141

深度优先搜索练习二

例题一:图像渲染 有一幅以 m x n 的二维整数数组表示的图画 image ,其中 image[i][j] 表示该图画的像素值大小。 你也被给予三个整数 sr , sc 和 newColor 。你应该从像素 image[sr][sc] 开始对图像进行 上色填充 。 为了完成 上色工作 ,从初始像素开始,记录初始坐标的 上下左右四个方向上 像素值与初始坐标相同的相连像素点,接着再记录这四个方向上符合条件的像素点与他们对应 四个方向上 像素值与初始坐标相同的相连像素点,……,重复该过程。将所有有记录的像素点

阿辉爱睡觉的博客 239

【小白深度教程 1.3】使用 BP-Net 深度补全网络,进行 KITTI 稠密点云和图像融合(Depth Completion 实战)

在上一节中,我们展示了如何将从激光雷达获取的稀疏点云(深度)映射到图像。因此这篇论文我们尝试使用 Depth Completion(深度补全)技术,来将稀释的点云深度,补全为稠密深度。

2401_87064292的博客 1198

PCIe协议之 Equalization篇 之 谈谈几种模式

对于两端有能力最高支持 32 GT/s 及以上速率的设备,如果把目标速度设置为 8 GT/s 或 16 GT/s 速率,是不建议采用 Bypass-Equalization-to-Highest-Rate 模式的,即便采用了,也不会针对 8 GT/s 或 16 GT/s 的目标速率进行 EQ。对于支持 32 GT/s 及以上速率的设备,其可能根本无需工作在 8 GT/s 或 16 GT/s 速率,这时再针对 8 GT/s 或 16 GT/s 速率进行 EQ,多少有点浪费。

那么菜的博客 561

【算法笔记】深度优先算法DFS(保姆级教学,一篇让你搞懂DFS的精髓)

本文章介绍了搜索算法中常用的DFS深度优先算法,它的核心思想是从一个起点开始,沿着一个方向尽可能深地搜索,直到无法继续为止,然后回溯到上一个节点,继续沿着其他方向搜索。DFS可以使用递归或栈(非递归)来实现。

weixin_74297512的博客 6516

在 SAP Fiori 里玩转 Manage Views:把过滤器与列表布局固化成你的默认工作台

本文介绍了SAP Fiori应用中"Manage Views"功能的核心价值和使用方法。该功能允许用户保存和复用个性化界面设置,包括筛选条件、列布局等,将重复操作简化为一次性配置。文章从技术实现、用户操作和治理建议三个维度展开: 功能本质:View存储的是界面状态而非业务模型,是提升个人生产力的工具 核心价值:固化高频操作,支持默认视图设置,实现"开箱即用"的工作状态 操作指南:详细说明了收藏、重命名、设为默认、自动应用等关键功能 治理建议:区分标准视图、个人视图和公

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 125

深度优先算法(DFS)

根据访问节点的顺序与方式,可以分为广度优先算法(BFS)和深度优先算法(DFS),本文介绍深度优先算法: 深度优先算法 1、算法概述 深度优先搜索属于图算法的一种,英文缩写为DFS。其过程简要来说是对每一个可能的分支路径深入到不能再深入为止,而且每个节点只能访问一次。 深度优先搜索是一种在开发爬虫早期使用较多的方法,它的目的是要达到被搜索结构的叶结点(即那些不包含任何超链的HTML文件) 。 它的...

qq_41896683的博客 3万+

uni-app - 最新实现将 uniapp 项目打包编译为 H5 网站,并上传部署到 web 服务器进行发布预览(从打包到发布完整流程步骤,Hbuilder 编译打包 h5 发行到 web 服务器)

uniapp,打包h5,打包编译H5网站,怎么打包h5,uniapp打包成H5部署到服务器教程,uniapp打包H5页面发布到服务器,uniapp开发,打包成H5部署到服务器_uniapp打包h5,uniapp如何打包h5项目,怎么把项目打包成H5,uniapp如何打包成H5并且放到web端上,打包成h5部署到服务器的步骤,打包发行到h5报错怎么办,如何将uniapp打包的h5网站放到服务器上,编译打包后怎么放到web服务器中,如何将uniapp开发的H5打包并部署到服务器,部署使用uniapp开发的h5

🏆 前端领域优质创作者 1万+

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

深度优先算法DFS(Depth First Search)

不撞南墙不回头。

Iamme 1万+

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

LeetCode琅琊榜第十三层-全排列(DFS深度优先算法)

LeetCode.46全排列 难度:中等 博主空间与往期力扣 题目链接

算法萌新一枚 804

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

深度优先算法 DFS总结(算法详解+模板+例题)

沿着树的深度遍历树的节点,尽可能深的搜索树的分支。共 m+1 行,第 1 行为 2 个数,n 和 m,分别表示一共有 n(n≤105) 篇文章(编号为 1 到 n)以及m(m≤106) 条参考文献引用关系。一个如下的 6×6 的跳棋棋盘,有六个棋子被放置在棋盘上,使得每行、每列有且只有一个,每条对角线(包括两条主对角线的所有平行线)上至多有一个棋子。有一个 n \times mn×m 的棋盘,在某个点 (x, y)(x,y) 上有一个马,要求你计算出马到达棋盘上任意一个点最少要走几步。

Alex_Fufu的博客 1万+

DFS (深度优先算法)

DFS(深度优先搜索算法):一种用于遍历或者树或者图的算法,是一种递归程序,不断递归达到无法在到达的点,简单点来说:一条路一直走,走到没有路后就原路返回,重新选择另一条 dfs(step + 1)。 DFS = 暴搜 + 回溯算法 + 剪枝(大多数是这样)。DFS需要回溯算法,其他算法也需要回溯算法,两种是一种调用关系。 暴搜:一条路走到黑(直接递归走到底) 回溯:DFS开启另一条路则需要回溯,如果暴搜那条路找不到答案就要回溯走另外一条道路。 剪枝:如果明确接下来的搜索找不到答案或者不是最优解,就

qq_46056407的博客 4730

数据结构_dfs深度优先算法入门(C语言)

数据结构_dfs深度优先算法入门(C语言) 文章目录数据结构_dfs深度优先算法入门(C语言)0.闲话1.个人理解2.全排列问题(1到n的排列组合)2.八皇后问题求解二维迷宫(1)只输走出迷宫解的个数(2)输出解的个数和路径 0.闲话 ​ 才学习数据结构的dfs,做一下笔记记录一下,加深理解-.- ​ 我这里就简单讲一下我的理解和一下例子 ​ 推荐学习资源(B站视频,原理和实例): 洛谷 普及组...

qq_35289660的博客 5299

C语言实现一个走迷宫小游戏(深度优先算法)

转载于我的博客园:https://www.cnblogs.com/xiao-qi-w/p/13031637.html 接上一篇万年历博文,还是那位朋友的练习题。这次是使用C语言做一个小游戏程序,三选一(2048、8皇后和迷宫游戏),我选择的是迷宫(文章末尾有源码下载链接以及演示视频链接)。个人认为这个程序的难点在于迷宫地图的绘制,也就是怎么建立一个迷宫。如果迷宫地图是在程序里写死的,那可玩性就大大降低了。那么能不能像正常游戏一样生成一个随机地图呢?当然有!在网上查到的结果不外...

qq_43464624的博客 9480
上一篇: Nothing for Nothing(二十一)
下一篇: Python连接MySql数据库方法
Re:fused
博客等级 码龄9年 474粉丝 162原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值