洛谷题单 -- 图论的简单入门

B3643 图的存储

链接 : 

图的存储 - 洛谷

思路 : 

这一题要考察图的存储方式 , 一般可以使用邻接矩阵 或 邻接表来存储 图的结点 和1 边的信息 ,详情请看代码 : 

代码

#include<bits/stdc++.h>
using namespace std;const int N = 1010 ;
int n , m ;
int a[N][N] ; // 邻接矩阵 
vector<int> b[N]; // 邻接表 // 邻接矩阵的输出 
void pa(){for(int i=1;i<=n;i++){for(int j=1;j<=n;j++){cout << a[i][j] << " ";}cout << endl ;}
}// 邻接表的输出 
void pb(){for(int i=1;i<=n;i++){int d = b[i].size();cout << d << " ";sort(b[i].begin(),b[i].end());for(int j=0;j<d;j++){cout << b[i][j] << " ";}cout << endl ;}
}int main(){cin >> n >> m;for(int i=0;i<m;i++){int x , y ; cin >> x >> y ;a[x][y] = 1 ; a[y][x] = 1 ; // 邻接矩阵b[x].push_back(y) ; b[y].push_back(x) ; // 邻接表 }pa();pb();return 0 ;
}

P5318 【深基18.例3】查找文献

链接 

【深基18.例3】查找文献 - 洛谷

思路 : 

这题考察有向图的 dfs 和 bfs ,详情请看代码,如果用邻接矩阵的话一定会mle,只能够使用邻接表,我这里采用的是用vector数组实现的邻接表,详情请看代码 : 

代码 

#include <iostream>
#include <vector>
#include <queue>
#include <cstring>
#include <algorithm>
using namespace std;
const int N = 1e5 + 10 ;
typedef long long LL ;int n , m , x , y;
bool b[N] ; // 状态记录数组 
vector<int> a[N] ; // 邻接表 
queue<int> q;inline int read(){//二进制优化的快读 int x=0,f=1;char ch=getchar();while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}while(ch>='0'&&ch<='9'){x=(x<<1)+(x<<3)+(ch^48);ch=getchar();}return x*f;
}// x指当前遍历到的结点,r表示已遍历过的结点 
void dfs(int x , int r){ b[x] = true ;cout << x << " " ; // 输出if(r == n) return ;for(int i=0;i<a[x].size();i++){if(!b[a[x][i]])dfs(a[x][i],r+1);}
}void bfs(int x){memset(b , false , sizeof(b)) ; // 清空bool数组b[x] = true ;q.push(x) ;while(!q.empty()){ // 还有没有没访问的 int v = q.front();q.pop() ; // 弹出队头 , 否则会一直在第一层遍历cout << v << " " ;for(int i=0;i<a[v].size();i++){if(!b[a[v][i]]){b[a[v][i]] = true ;q.push(a[v][i]);}} }
}int main(){// n = read() ; m = read() ;cin >> n >> m ;for(int i=1;i<=m;i++){x = read() ; y = read() ; // cin >> x >> y ; a[x].push_back(y);}for(int i=1;i<=n;i++) sort(a[i].begin(),a[i].end()); // 将每条路通向的点从小到大排序 dfs(1,0) ; // 深搜 puts("");for(int i=1;i<=n;i++) b[i] = false ;bfs(1) ; // 宽搜  puts("") ;return 0;
}

B3644 【模板】拓扑排序 / 家谱树

链接 :

 https://www.luogu.com.cn/problem/B3644

思路 : 

给出案例画图如下 : 

拓扑排序(模板题)

代码 : 

#include<bits/stdc++.h>
using namespace std;const int N = 102 ;vector<int> a[N] ;
int tp[N] ; // 存放拓扑序列 
int  d[N] ; // 存放每个结点的入度 
int n , x ;bool toposort() {queue<int> q;int tt = 0 ;for(int i = 1; i <= n; i++) {if(d[i] == 0) {q.push(i); // 将入度为 0 的点全放进来 }}while(!q.empty()) {int u = q.front() ; q.pop();tp[++tt] = u ;for(auto v : a[u]) {d[v] -- ;if(d[v] == 0){q.push(v);}}}return tt == n;	
}int main(){scanf("%d",&n);for(int i=1;i<=n;i++){while(cin >> x){if(x == 0) break;a[i].push_back(x);d[x] ++;}}	if(toposort()) {for(int i=1;i<=n;i++){cout << tp[i] << " ";}cout << endl ;}else{return 0;}return 0 ;
}

或者说这样 : 

#include<bits/stdc++.h>
using namespace std;const int N = 102 ;vector<int> a[N] ;
int  d[N] ; // 存放每个结点的入度 
int n , x ;bool toposort() {queue<int> q;vector<int> res;for(int i = 1; i <= n; i++) {if(d[i] == 0) {q.push(i); // 将入度为 0 的点全放进来 }}while(!q.empty()) {int u = q.front() ; q.pop();res.push_back(u);for(auto v : a[u]) {d[v] -- ;if(d[v] == 0){q.push(v);}}}if(res.size()==n) {for(auto x : res) cout << x << " ";return true;}else {return false;}
}int main(){scanf("%d",&n);for(int i=1;i<=n;i++){while(cin >> x){if(x == 0) break;a[i].push_back(x);d[x] ++;}}	if(toposort()) {return 0 ;}return 0 ;
}

P3916 图的遍历

链接 : 

图的遍历 - 洛谷

思路 : 

反向建边 + dfs : 

代码 : 

#include<bits/stdc++.h>
using namespace std;const int N = 1e5 + 10 ;
vector<int> g[N] ;
int n , m ;
int ans[N] ;
// 反向建图 + dfs
// 考虑较大的点能够法相到达那一些点 void dfs(int i , int b){if(ans[i]) return  ;ans[i] = b ;for(int j=0;j<g[i].size();j++){dfs(g[i][j] , b) ;}
}int main(){cin >> n >> m ;for(int i=0;i<m;i++){int x , y ; cin >> x >> y ;g[y].push_back(x) ; // 反向建边 }for(int i=n;i;i--) dfs(i,i) ; // 对i进行dfs for(int i=1;i<=n;i++){cout << ans[i] << " " ;
//		if(ans[i]) cout << ans[i] << endl ;
//		else cout << i << endl ;}  return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/812024.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Python】实现导入、提交文件并显示其路径的基础GUI界面

The tkinter package (“Tk interface”) 是一个基于Tcl/Tk GUI工具标准的Python接口。集合在大多数操作系统都有Tk和tkinter 库&#xff0c;包括MacOS&#xff0c;Window还有一些Unix类的操作系统 【基础操作】 1 设置窗口 # -*- coding: utf-8 -*- from tkinter import *#创…

ASP.NET MVC企业级程序设计 (EF+MVP实现显示数据)

效果图 实现过程 1创建数据库 2创建项目文件 3创建控制器&#xff0c;右键添加&#xff0c;控制器 注意这里要写Home 创建成功 数据模型创建过程之前作品有具体过程 4创建视图&#xff0c;右键添加视图 5HomeController.cs代码 using System; using System.Collections.Gene…

【数学建模】2024认证杯C题完整思路和代码论文解析

经过不懈的努力&#xff0c;2024认证杯数学建模C题的完整论文和代码已完成&#xff0c;代码为A题全部4问的代码&#xff0c;论文包括摘要、问题重述、问题分析、模型假设、符号说明、模型的建立和求解&#xff08;问题1模型的建立与求解、问题2模型的建立与求解、问题3模型的建…

浏览器工作原理与实践--HTTP/1:HTTP性能优化

谈及浏览器中的网络&#xff0c;就避不开HTTP。我们知道HTTP是浏览器中最重要且使用最多的协议&#xff0c;是浏览器和服务器之间的通信语言&#xff0c;也是互联网的基石。而随着浏览器的发展&#xff0c;HTTP为了能适应新的形式也在持续进化&#xff0c;我认为学习HTTP的最佳…

【LAMMPS学习】八、基础知识(2.6)Lammps中的Walls墙

8. 基础知识 此部分描述了如何使用 LAMMPS 为用户和开发人员执行各种任务。术语表页面还列出了 MD 术语&#xff0c;以及相应 LAMMPS 手册页的链接。 LAMMPS 源代码分发的 examples 目录中包含的示例输入脚本以及示例脚本页面上突出显示的示例输入脚本还展示了如何设置和运行各…

解释器模式:专为语言处理定制的模式

在软件开发中&#xff0c;解释器模式是一种特定的行为型设计模式&#xff0c;它用于定义一种语法&#xff0c;并提供一个解释器来解释这种语法或表达式。这种模式用于专门的情况&#xff0c;当有一个简单的语言需要解释时&#xff0c;它可以被用来表达实例的规则。本文将详细介…

【vue】watchEffect 自动侦听器

watchEffect&#xff1a;自动监听值的变化 获取旧值时&#xff0c;不是很方便&#xff0c;建议用watch <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevic…

每日一练(力扣)

我的思路是暴力枚举: 情况1:相同&#xff0c;就让子串和原串同时后移继续比较 情况2:不相同&#xff0c;就只让原串后移 public int strStr(String haystack, String needle) {if (haystack.length() < needle.length()){return -1;}for (int i 0; i < h…

K8S哲学 - 常见的资源类型

资源类型 namespace kubectl apply 和 kubectl create kubectl apply是声明式的 和 kubectl create是命令式的对吗 deployment 和 job的区别 k8s 的 lable 的意义

【YUNBEE云贝-进阶课】MySQL8.0性能优化实战培训

众多已经学习过MySQL 8.0 OCP认证专家的课程的同学们对 MySQL 8.0 的安装部署、体系结构、配置监控、用户管理、主从复制、系统运维、MGR等基础操作和动手实验有了一定的学习基础.很多学员反馈希望更进一步提升技术能力、解决工作中碰到的性能问题。 针对MySQL8.0的数据库性能优…

DMA的认识

DMA介绍 Q:什么是DMA&#xff1f; DMA( Direct Memory Access&#xff0c;直接存储器访问 ) 提供在 外设与内存 、 存储器和存储器 、 外设 与外设 之间的 高速数据传输 使用。它允许不同速度的硬件装置来沟通&#xff0c;而不需要依赖于 CPU &#xff0c;在这个时间中&am…

算法打卡day34

今日任务&#xff1a; 1&#xff09;62.不同路径 2&#xff09;63.不同路径 II 3&#xff09;复习day10 62.不同路径 题目链接&#xff1a;62. 不同路径 - 力扣&#xff08;LeetCode&#xff09; 一个机器人位于一个 m x n 网格的左上角 &#xff08;起始点在下图中标记为 “S…

数据中心的网络架构设计,打造高效、安全的数字底座

数据中心的网络架构设计 一、数据中心网络架构设计原则 网络,作为数据中心的核心支柱,其结构精妙,由众多二层接入设备与少量三层设备共同编织而成。过去,数据中心网络规模有限,仅凭数十台设备的简单互连便能实现信息的畅通无阻。然而,随着技术与应用需求的飞速增长,数据…

Missing artifact org.opencv:opencv:jar:4.10.0 [opencv-4.10.0.jar]

Missing artifact org.opencv:opencv:jar:4.10.0 [opencv-4.10.0.jar] https://mvnrepository.com/artifact/org.opencv/opencv 根本就没有 找了个旧项目的opencv-410.jar修改下opencv-4.10.0.jar放到目录下面就好了 D:\localRepository\org\opencv\opencv\4.10.0 OpenCV-C…

[HDFS 相关Shell命令]

目录 HDFS 相关Shell命令: 相关文件操作命令: HDFS 相关Shell命令: 注意&#xff0c;下述命令中的<path>代表文件或目录的路径&#xff0c;<local_path>代表本地文件系统的路径&#xff0c;而<hdfs_path>代表HDFS上的路径。使用这些命令时&#xff0c;需要…

类的六个默认成员函数(上)

目录 构造函数 析构函数 拷贝构造函数 对于日期&#xff08;Date&#xff09;类&#xff0c;可以通过 Init 公有方法给对象设置日期&#xff0c;但如果每次创建对象时都调用该方法设置信息&#xff0c;未免有点麻烦&#xff0c;那能否在对象创建时&#xff0c;就将信息设置进…

鸿蒙OS开发学习:【第三方库调用】

介绍 本篇Codelab主要向开发者展示了在Stage模型中&#xff0c;如何调用已经上架到[三方库中心]的社区库和项目内创建的本地库。效果图如下&#xff1a; 相关概念 [Navigation]&#xff1a;一般作为Page页面的根容器&#xff0c;通过属性设置来展示页面的标题、工具栏、菜单。…

政安晨:【Keras机器学习实践要点】(二十七)—— 使用感知器进行图像分类

目录 简介 设置 准备数据 配置超参数 使用数据增强 实施前馈网络&#xff08;FFN&#xff09; 将创建修补程序作为一个层 实施补丁编码层 建立感知器模型 变换器模块 感知器模型 编译、培训和评估模式 政安晨的个人主页&#xff1a;政安晨 欢迎 &#x1f44d;点赞✍…

Spring Boot集成Graphql快速入门Demo

1.Graphql介绍 GraphQL 是一个用于 API 的查询语言&#xff0c;是一个使用基于类型系统来执行查询的服务端运行时&#xff08;类型系统由你的数据定义&#xff09;。GraphQL 并没有和任何特定数据库或者存储引擎绑定&#xff0c;而是依靠你现有的代码和数据支撑。 优势 GraphQL…

npm install 报 ERESOLVE unable to resolve dependency tree 异常解决方法

问题 在安装项目依赖时&#xff0c;很大可能会遇到安装不成功的问题&#xff0c;其中有一个很大的原因&#xff0c;可能就是因为你的npm版本导致的。 1.npm ERR! code ERESOLVE npm ERR! ERESOLVE unable to resolve dependency tree 2.ERESOLVE unable to resolve dependenc…