acwing算法基础课(第三讲 搜索与图论)

这篇具有很好参考价值的文章主要介绍了acwing算法基础课(第三讲 搜索与图论)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

void dfs(int u){

if(n == u){

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

puts(“”);

return;

}

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

if(!col[i] && !dg[u+i] && !udg[n - u + i]){

g[u][i] = ‘Q’;

col[i] = dg[u+i] = udg[n - u + i] = true;

dfs(u+1);

col[i] = dg[u+i] = udg[n - u + i] = false;

g[u][i] = ‘.’;

}

}

}

int main(){

scanf(“%d”,&n);

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

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

g[i][j] = ‘.’;

}

}

dfs(0);

return 0;

}

思路二:

枚举每一格

#include <bits/stdc++.h>

using namespace std;

const int N1 = 10,N2 = 20;

int n;

char g[N1][N2];

bool row[N1],col[N1],dg[N2],udg[N2];

void dfs(int x,int y,int s){

if(y == n) y = 0,x++;

if(x == n){

if(s == n){

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

puts(“”);

}

return;

}

// 不放皇后

dfs(x,y+1,s);

// 放皇后

if(!row[x] && !col[y] && !dg[x + y] && !udg[n + x - y]){

g[x][y] = ‘Q’;

row[x] = col[y] = dg[x+y] = udg[x-y+n] = true;

dfs(x,y+1,s+1);

g[x][y] = ‘.’;

row[x] = col[y] = dg[x+y] = udg[x-y+n] = false;

}

}

int main(){

scanf(“%d”,&n);

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

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

g[i][j] = ‘.’;

}

}

dfs(0,0,0);

return 0;

}

BFS

BFS有一个很明显的模板

while(!queue.empty()){

auto t = queue.front();

queue.pop();

queue.push(…);

}

844. 走迷宫

给定一个n*m的二维整数数组,用来表示一个迷宫,数组中只包含0或1,其中0表示可以走的路,1表示不可通过的墙壁。

最初,有一个人位于左上角(1, 1)处,已知该人每次可以向上、下、左、右任意一个方向移动一个位置。

请问,该人从左上角移动至右下角(n, m)处,至少需要移动多少次。

数据保证(1, 1)处和(n, m)处的数字为0,且一定至少存在一条通路。

输入格式

第一行包含两个整数n和m。

接下来n行,每行包含m个整数(0或1),表示完整的二维数组迷宫。

输出格式

输出一个整数,表示从左上角移动至右下角的最少移动次数。

数据范围

1≤n,m≤100

输入样例:

5 5

0 1 0 0 0

0 1 0 1 0

0 0 0 0 0

0 1 1 1 0

0 0 0 1 0

输出样例:

8

#include <bits/stdc++.h>

using namespace std;

const int N = 100 + 10;

typedef pair<int,int> PII;

int g[N][N];

int d[N][N];

int n,m;

queue q;

int bfs(){

memset(d,-1,sizeof(d));

q.push({0,0});
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。acwing算法基础课(第三讲 搜索与图论),程序员,算法,图论,深度优先

acwing算法基础课(第三讲 搜索与图论),程序员,算法,图论,深度优先

acwing算法基础课(第三讲 搜索与图论),程序员,算法,图论,深度优先

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

如果你觉得这些内容对你有帮助,可以扫码获取!!(备注Java获取)

acwing算法基础课(第三讲 搜索与图论),程序员,算法,图论,深度优先

最后

我还为大家准备了一套体系化的架构师学习资料包以及BAT面试资料,供大家参考及学习

已经将知识体系整理好(源码,笔记,PPT,学习视频)

acwing算法基础课(第三讲 搜索与图论),程序员,算法,图论,深度优先

acwing算法基础课(第三讲 搜索与图论),程序员,算法,图论,深度优先

acwing算法基础课(第三讲 搜索与图论),程序员,算法,图论,深度优先

《一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码》点击传送门即可获取!文章来源地址https://www.toymoban.com/news/detail-846918.html

最后

我还为大家准备了一套体系化的架构师学习资料包以及BAT面试资料,供大家参考及学习

已经将知识体系整理好(源码,笔记,PPT,学习视频)

[外链图片转存中…(img-uHl1hhAc-1711959756953)]

[外链图片转存中…(img-qFiljNH4-1711959756954)]

[外链图片转存中…(img-9eJBmaUs-1711959756954)]

《一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码》点击传送门即可获取!

到了这里,关于acwing算法基础课(第三讲 搜索与图论)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • acwing算法基础之搜索与图论--kruskal算法

    kruskal算法的关键步骤为: 将所有边按照权重从小到大排序。 定义集合S,表示生成树。 枚举每条边(a,b,c),起点a,终点b,边长c。如果结点a和结点b不连通(用并查集来维护),则将这条边加入到集合S中。 kruskal算法的时间复杂度为O(mlogm),它用来解决稀疏图的最小生成树问题

    2024年02月05日
    浏览(33)
  • Acwing-基础算法课笔记之搜索与图论

    bellman-ford算法适用于负权边的图,求 1 到 n 的最多经过k条边的最短距离。 如图所示: 1 2 3 dist 0 ∞ infty ∞ ∞ infty ∞ ⇓ Downarrow ⇓ 1 2 3 dist 0 1 ∞ infty ∞ ⇓ Downarrow ⇓ 1 2 3 dist 0 1 2 此过程中出现了串联的结果,所以是错误的,此时需要进行备份操作。 备份操作如下: 为了

    2024年01月20日
    浏览(38)
  • 【AcWing算法基础课】第五章 动态规划(未完待续)

    本专栏文章为本人AcWing算法基础课的学习笔记,课程地址在这。如有侵权,立即删除。 dp问题的优化 :在基本形式dp上作等价变形。 dp问题的解题方法 : 1)状态表示 集合 属性:最大值/最小值/数量。 2)状态计算 集合划分(不重不漏) 题目链接: 2. 01背包问题 - AcWing题库

    2024年02月12日
    浏览(33)
  • 【AcWing算法基础课】第二章 数据结构(部分待更)

    本专栏文章为本人AcWing算法基础课的学习笔记,课程地址在这。如有侵权,立即删除。 邻接表 :存储图和树 e数组存储每个结点的值,ne数组存储每个结点的指向的下一个结点。 数组模拟链表比较快,指针模拟会涉及到new操作,比较慢。 题目链接 :826. 单链表 1.1题目描述

    2024年02月13日
    浏览(38)
  • ✔ ★ 算法基础笔记(Acwing)(三)—— 搜索与图论(17道题)【java版本】

    1. 排列数字(3分钟) 每次遍历dfs参数是 遍历的坑位 原题链接 2. n-皇后问题 原题链接 方法 1. 按行遍历(过程中有回溯、剪枝) 思想: 每次递归中,遍历一行的元素,如果可以放皇后,就递归到下一行,下一行中不行了,就返回来,回溯, 方法2. 按每个元素遍历(没有减枝)

    2024年02月05日
    浏览(34)
  • AcWing 算法基础课二 数据结构 链表 栈 队列 并查集 哈希表

    链表题目:力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台 AcWing. 826.单链表 双链表 AcWing 827.双链表 AcWing 828.模拟栈 AcWing 3302.表达式求值 AcWing 829. 模拟队列 AcWing 830.单调栈 AcWing 154.滑动窗口 AcWing 831. KMP字符串 AcWing 835. Trie字符串统计 AcWing 143. 最大异或对 AcWing 836.合并集合

    2024年02月15日
    浏览(30)
  • 第3章:搜索与图论【AcWing】

    阅读前导 本文默认读者有数据结构和图论基础,本文是对图论的几个代表性算法的入门,虽然题目的解法比较朴素,但是比较好理解。 首先简单复习一下离散数学中图论的相关概念。 图是由顶点和边组成,顶点一般表示对象,边一般表示对象之间的关系。 在图论中,多个顶

    2024年02月03日
    浏览(35)
  • 算法基础课——基础算法(模板整理)

     快速排序 快速排序 第K个数 归并排序   归并排序 逆序对的数量 二分   数的范围 数的三次方根 高精度   高精度加法 Python一行就可以解决 高精度减法 高精度乘法 高精度除法 前缀和与差分 前缀和 子矩阵的和 差分 差分矩阵 双指针算法 最长连续不重复子序列 数组元素的目

    2024年02月12日
    浏览(28)
  • 【算法基础:搜索与图论】3.3 拓扑排序

    https://oi-wiki.org/graph/topo/ 本文主要学习拓扑排序相关知识。 拓扑排序的英文名是 Topological sorting。 拓扑排序要解决的问题是给一个 有向无环图 的 所有节点排序 。 我们可以拿大学每学期排课的例子来描述这个过程,比如学习大学课程中有:程序设计,算法语言,高等数学,

    2024年02月16日
    浏览(34)
  • 算法基础课第五讲 动态规划

    时间复杂度:状态数量 转移的计算量 * 总体概述:给一堆物品,有体积有价值。有一个背包,在背包能装下的前提下最终能装下多少(背包不一定要装满) DP问题:一般需要从两方面考虑:状态表示以及状态计算 状态表示:f(i,j) 从两个方面考虑:集合(所有选法的集合)(

    2024年02月01日
    浏览(29)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包