图论题目集一(代码 注解)
目录
题目一:
题目二:
题目三:
题目四:
题目五:
题目六:
题目七:
题目一:

#include<iostream>
#include<queue>
#include<cstring>
using namespace std;
int g[15][15], vis[15] = { 0 };
int n, m;
queue<int> q;
void dfs(int k)//深度
{cout << k << " ";vis[k] = 1;for (int i = 0; i < n; i++){if (i == k)continue;if (vis[i] == 0 && g[k][i]){dfs(i);}}return;
}
void bfs(int k)//广度
{q.push(k);while (!q.empty()){k = q.front();q.pop();if(vis[k]==0){cout<<k<<" ";vis[k]=1;}for (int i = 0; i < n; i++){if (vis[i] == 0 && g[k][i] == 1){q.push(i);}}}return;
}
int main()
{cin >> n >> m;for (int i = 1; i <= m; i++)//构建邻接矩阵{int x, y;cin >> x >> y;g[x][y] = 1, g[y][x] = 1;}for (int i = 0; i < n; i++)//深度{if (vis[i] == 0){cout << "{ ";dfs(i);cout << "}" << endl;}}memset(vis, 0, sizeof(vis));for (int i = 0; i < n; i++)//广度{if(vis[i]==0){cout << "{ ";bfs(i);cout << "}" << endl;}}
}
题目二:

#include<iostream>
#include<algorithm>
using namespace std;
int g[10005][10005];
float n, k;
typedef struct node
{int data;int w = 0;
}node;
void warshall()//传递闭包
{for (int k = 1; k <= n; k++)for (int i = 1; i <= n; i++)for (int j = 1; j <= n; j++){if (g[i][k] && g[k][j])//连通{if (i == j)continue;if (g[i][j] == 0 || g[i][j] > g[i][k] + g[k][j])//没有直接连通或者新通路距离小于之前通路g[i][j] = g[i][k] + g[k][j];}}
}
bool cmp(node a, node b)
{return a.w < b.w;
}
int main()
{cin >> n >> k;for (int i = 1; i <= n; i++)for (int j = 1; j <= n; j++)g[i][j] = 0;for (int i = 0; i < k; i++)//无向图,初始距离都为1{int v1, v2;cin >> v1 >> v2;g[v1][v2] = 1;g[v2][v1] = 1;}warshall();/*for (int i = 1; i <= n; i++)//输出邻接矩阵{for (int j = 1; j <= n; j++)cout << g[i][j] << " ";cout << endl;}*/float ans[10005] ;for (int i = 1; i <= n; i++){ans[i] = 0;for (int j = 1; j <= n; j++){if (i == j)ans[i]++;if (g[i][j]>0 && g[i][j] <= 6)//符合条件ans[i]++;}}for (int i = 1; i <= n; i++)printf("%d:% .2f%%\n", i, ans[i] / n * 100);
}
题目三:


#include<iostream>
using namespace std;
int g[1010][1010];
int n,m,s;
int vis[1010];
int path[1010];
int cnt=0;
void dfs(int k)//深度
{//cout<<k<<" ";path[cnt++]=k;//记录去的路径vis[k]=1;for(int i=0;i<=n;i++){if(i==k)continue;if(vis[i]==0&&g[k][i]==1){dfs(i);path[cnt++]=k;//记录回的路径}}return ;
}
int main()
{cin>>n>>m>>s;for(int i=1;i<=m;i++)//构建邻接矩阵{int x,y;cin>>x>>y;g[x][y]=g[y][x]=1;}dfs(s);int flag=1;//标记是否可以遍历完所有for(int i=1;i<=n;i++)//查询是否遍历完所有{if(vis[i]==0){flag=0;break;}}if(flag==1)//输出序列{for(int i=0;i<cnt;i++){cout<<path[i];if(i!=cnt-1)cout<<" ";}}else{for(int i=0;i<cnt;i++)cout<<path[i]<<" ";cout<<0;}
}
题目四:


#include<iostream>
#include<queue>
#include<vector>
#include<cstring>
using namespace std;
typedef long long ll;
const ll N = 3e5 + 10, M = 1e6 + 10, inf = 1e14;
struct node
{ll v, w;bool operator <(const node& y) const//重载一个<,用于优先队列排序{return w > y.w;//小到大}
};
int n, m, t;
priority_queue<node>q;
vector<node> e[N];
ll dis[N], vis[N];
void Dij(int t)
{dis[t] = 0;//从t号点出发,表示从t到t距离为0q.push({ t,dis[t] });//t号点以及到t的距离入队while (q.size()){int u = q.top().v;//取最小边相连的点出队q.pop();if (vis[u])//访问过则跳过continue;vis[u] = 1;//没访问赋为访问for (auto i : e[u])//遍历以u为出发点的边{int v = i.v, w = i.w;//取其相连的点及权值if (dis[v] > dis[u] + w)//经过u点到v点的权值小于之前的权值则更新{dis[v] = dis[u] + w;q.push({ v,dis[v] });//v点以及到v的距离}}}}
int main()
{cin >> n >> m;for (int i = 1; i <= m; i++){int x, y, w=1;cin >> x >> y;e[x].push_back({ y,w });//存入以x出发到y,权值为we[y].push_back({ x,w });//存入以x出发到y,权值为w}int N;cin >> N;while (N--){cin >> t;float ans = 0,sum=0;memset(dis, 0x3f3f3f, sizeof(dis));memset(vis, 0, sizeof(vis));Dij(t);//从t点出发for (int i = 1; i <= n; i++){sum += dis[i];//求和}//cout << sum;ans = (n - 1) /sum;printf("Cc(%d)=%.2f\n", t, ans);}
}
题目五:


#include<iostream>//并查集
using namespace std;
int fa[204], mp[102][102];
int find(int x)//查找
{if(fa[x]==x) return x;return fa[x]=find(fa[x]);
}
void Merge(int x, int y)//合并
{int a=find(x), b=find(y);if(a==b) return;else fa[a]=fa[b];
}
int main()
{int n, m, k;cin>>n>>m>>k;int a, b, c;for(int i=1;i<=n;i++)//初始化fa[i]=i;for(int i=0; i<m; i++){cin>>a>>b>>c;mp[a][b]=c,mp[b][a]=c;if(c==1)//为朋友则合并,因为朋友的朋友也是朋友Merge(a, b);}for(int i=0; i<k; i++){cin>>a>>b;if(mp[a][b]==1) cout<<"No problem"<<endl;else if(mp[a][b]==-1)//是敌对关系{if(find(a)==find(b)) cout<<"OK but..."<<endl;//但是有相同的朋友,即在一个集合内else cout<<"No way"<<endl;}else cout<<"OK"<<endl;}return 0;
}
题目六:

#include<iostream>
using namespace std;
int n, m, mp[520][520], f[520];
void init() //初始化
{for (int i = 0; i < n; i++)f[i] = i;
}
int find(int x) //查询
{if (x == f[x]) return x;return f[x] = find(f[x]);
}
void merge(int x, int y)//合并
{int xx = find(x);int yy = find(y);if (xx != yy) f[xx] = yy;return;
}
int sum()//统计连通块个数
{int cnt = 0;for (int i = 0; i < n; i++) //统计连通块个数 {if (i == find(i)) cnt++;}return cnt;
}
int main()
{int a, b, k, x, cnt = 0, cnt2, flag = 0;cin >> n >> m;init();while (m--) {cin >> a >> b;mp[a][b] = 1;mp[b][a] = 1;merge(a, b);}cin >> k;cnt = sum();if (k == n) flag = 1; //要输出Game Over; while (k--) {cin >> x;init();cnt2 = 0; //x去掉后的连通区域个数 for (int i = 0; i < n; i++) mp[x][i] = mp[i][x] = 0;for (int i = 0; i < n; i++) {for (int j = 0; j < n; j++){if (mp[i][j]) merge(i, j);}}cnt2 = sum();if (cnt2 < cnt + 2) cout << "City " << x << " is lost." << endl;else cout << "Red Alert: City " << x << " is lost!" << endl;//1、去掉i点后,一个连通块至少被分为两个,增加了一个cnt = cnt2; //2、去掉i点后,再次统计cnt2时,就会把去掉的点i也加上,所以要大于cnt+1}if (flag) cout << "Game Over." << endl;
}
题目七:


#include<iostream>
#include<queue>
using namespace std;
int n, id, fa, ma, k;
int f[10100], peo[10100], avgs[10100], avga[10100],st[10100];
struct node
{int a, b;
}e[10100];
struct family
{int id, peo, avgs, avga;bool operator<(const family& x)const{if (x.peo * avga == peo * x.avga)//人均相等,则升序排序return id > x.id;return x.peo * avga < peo * x.avga;//人均多的在前}
};
int find(int x)//查找
{if (f[x] == x) return x;return f[x] = find(f[x]);
}
void meger(int x, int y)//合并
{x = find(x), y = find(y);if (x != y){f[max(x, y)] = min(x, y);//小号id的设为父亲peo[min(x, y)] += peo[max(x, y)];//家庭人数加到小号idavgs[min(x, y)] += avgs[max(x, y)];//房屋数量加到小号idavga[min(x, y)] += avga[max(x, y)];//服务面积加到小号面积}
}
int main()
{for (int i = 0; i < 10100; i++) f[i] = i, peo[i] = 1;//初始化,每个父亲节点是自己,自己家庭都有一个自己cin >> n;int count = 0;for (int i = 1; i <= n; i++){cin >> id >> fa >> ma >> k;if (fa != -1) e[count++] = { id,fa };//存关系if (ma != -1) e[count++] = { id,ma };//存关系st[id] = 1;//存在这个人int kid;for (int j = 1; j <= k; j++){cin >> kid;e[count++] = { id,kid };//存关系}cin >> avgs[id] >> avga[id];}for (int i = 0; i < count; i++)//合并家庭{int a = e[i].a, b = e[i].b;st[a] = st[b] = 1;meger(a, b);//合并二者为一个家庭}priority_queue<family>ans;//优先队列for (int i = 0; i < 10100; i++){if (st[i] && f[i] == i)//这个人存在且父亲节点是自己ans.push({ i,peo[i],avgs[i],avga[i] });}//count << st[8888] << f[8888];cout << ans.size() << endl;while (!ans.empty()){family t = ans.top();ans.pop();printf("%04d %d %.3lf %.3lf\n", t.id, t.peo, (double)t.avgs / t.peo, (double)t.avga / t.peo);}
}
相关文章:
图论题目集一(代码 注解)
目录 题目一: 题目二: 题目三: 题目四: 题目五: 题目六: 题目七: 题目一: #include<iostream> #include<queue> #include<cstring> using namespace st…...
解释MVC和MVVM架构模式
一、解释MVC和MVVM架构模式 MVC和MVVM都是常见的前端架构模式,用于抽象分离并解决特定问题。这两种模式在结构上具有一定的相似性,但在细节和数据处理方式上存在一些差异。 MVC,即Model-View-Controller,是一种用于应用程序分层…...
OLLAMA:如何像云端一样运行本地大语言模型
简介:揭开 OLLAMA 本地大语言模型的神秘面纱 您是否曾发现自己被云端语言模型的网络所缠绕,渴望获得更本地化、更具成本效益的解决方案?那么,您的探索到此结束。欢迎来到 OLLAMA 的世界,这个平台将彻底改变我们与大型…...
React全家桶及原理解析-lesson4-Redux
lesson4-react全家桶及原理解析.mov React全家桶及原理解析 React全家桶及原理解析 课堂⽬标资源起步Reducer 什么是reducer什么是reduceRedux 上⼿ 安装reduxredux上⼿检查点react-redux 异步代码抽取Redux拓展 redux原理 核⼼实现中间件实现redux-thunk原理react-redux原理 实…...
电商api数据接口技术开发来赞达lazada通过商品ID抓取商品详情信息item_get请求key接入演示
要获取Lazada的商品详情,你需要使用item_get请求。首先,你需要注册一个开发者账号并获取API密钥(App Key和App Secret)。然后,你可以使用以下Python代码示例来获取商品详情: # coding:utf-8 ""&…...
零基础入门多媒体音频(2)-音频焦点2
说实话,android的代码是越来越难以阅读。业务函数里面狗皮膏药似的补丁与日俱增。继上篇简要介绍音频焦点的文章,这篇文章的主要内容是分析audiofocus的实现。看了一下午的相关代码都没找到做audiofocus策略的核心逻辑。目前能看懂的大概包含下面两个逻辑…...
Spark杂谈
文章目录 什么是Spark对比HadoopSpark应用场景Spark数据处理流程什么是RDDSpark架构相关进程入门案例:统计单词数量Spark开启historyServer 什么是Spark Spark是一个用于大规模数据处理的统一计算引擎Spark一个重要的特性就是基于内存计算,从而它的速度…...
【PyTorch】进阶学习:一文详细介绍 torch.save() 的应用场景、实战代码示例
【PyTorch】进阶学习:一文详细介绍 torch.save() 的应用场景、实战代码示例 🌈 个人主页:高斯小哥 🔥 高质量专栏:Matplotlib之旅:零基础精通数据可视化、Python基础【高质量合集】、PyTorch零基础入门教程…...
私域流量运营的关键要素和基本步骤
解锁增长的四大关键: 关键要素一:精准营销 精准营销是私域流量运营的核心所在。通过精细化运营和个性化服务,企业可以将普通用户转化为忠实粉丝,提高用户的粘性和转化率。采用数据驱动的精准营销策略,深度挖掘用户需求…...
k8s部署hadoop
(作者:陈玓玏) 配置和模板参考helm仓库:https://artifacthub.io/packages/helm/apache-hadoop-helm/hadoop 先通过以下命令生成yaml文件: helm template hadoop pfisterer-hadoop/hadoop > hadoop.yaml用kube…...
deepspeed分布式训练在pytorch 扩展(PyTorch extensions)卡住
错误展示: Using /root/.cache/torch_extensions/py310_cu121 as PyTorch extensions root... Using /root/.cache/torch_extensions/py310_cu121 as PyTorch extensions root... 错误表现: 出现在多卡训练过程的pytorch 扩展,deepspee…...
Rust 的 HashMap
在 Rust 中,HashMap 是一个从键(key)映射到值(value)的数据结构。它允许你以 O(1) 的平均时间复杂度存储、检索和删除键值对。HashMap 实现了 std::collections::HashMap 结构体,通常通过 use std::collect…...
exporter方式监控达梦数据库
蓝鲸监控 随着国产化和信创的深入,开始普遍使用国产化数据库–如达梦数据库,蓝鲸平台默认没有对其进行监控,但是平台了提供监控告警的能力。比如脚本采集,脚本的是一种灵活和快速的监控采集方式,不同层的监控对象都可…...
供应链安全之被忽略的软件质量管理平台安全
背景 随着我国信息化进程加速,网络安全问题更加凸显。关键信息基础设施和企业单位在满足等保合规的基础上,如何提升网络安全防御能力,降低安全事件发生概率?默安玄甲实验室针对SonarQube供应链安全事件进行分析,强调供…...
python入门(二)
python的安装很方便,我们这里就不再进行讲解,大家可以自己去搜索视频。下面分享一下Python的入门知识点。 执行命令的方式 在安装好python后,有两种方式可以执行命令: 命令行程序文件,后缀名为.py 对于命令行&…...
Mysql,MongoDB,Redis的横纵向对比
一,什么是Mysql Mysql是一款安全,可以跨平台,高效率的数据库系统,运行速度高,安全性能高,支持面向对象,安全性高,并且成本比较低,支持各种开发语言,数据库的存储容量大,有许多的内置函数。 二,什么是MongoDB MongoDB是基于分布式文件存储的数据库,是一个介于关…...
css3 实现html样式蛇形布局
文章目录 1. 实现效果2. 实现代码 1. 实现效果 2. 实现代码 <template><div class"body"><div class"title">CSS3实现蛇形布局</div><div class"list"><div class"item" v-for"(item, index) …...
基于消失点的相机自标定
基于消失点的相机自标定 附赠最强自动驾驶学习资料:直达链接 相机是通过透视投影变换来将3D场景转换为2D图像。在射影变换中,平行线相交于一点称之为消失点。本文详细介绍了两种利用消失点特性的标定方法。目的是为根据实际应用和初始条件选择合适的标…...
Python:filter过滤器
filter() 是 Python 中的一个内置函数,用于过滤序列,过滤掉不符合条件的元素,返回由符合条件元素组成的新列表。该函数接收两个参数,一个是函数,一个是序列,序列的每个元素作为参数传递给函数进行判定&…...
Python函数学习
Python函数学习 1.函数定义 在函数定义阶段只检查函数的语法问题 2.实参形参 总结: (1)位置参数就是经常用的按照位置顺序给出实参的值; (2)关键字实参形式:key123;放在…...
MPNet:旋转机械轻量化故障诊断模型详解python代码复现
目录 一、问题背景与挑战 二、MPNet核心架构 2.1 多分支特征融合模块(MBFM) 2.2 残差注意力金字塔模块(RAPM) 2.2.1 空间金字塔注意力(SPA) 2.2.2 金字塔残差块(PRBlock) 2.3 分类器设计 三、关键技术突破 3.1 多尺度特征融合 3.2 轻量化设计策略 3.3 抗噪声…...
day52 ResNet18 CBAM
在深度学习的旅程中,我们不断探索如何提升模型的性能。今天,我将分享我在 ResNet18 模型中插入 CBAM(Convolutional Block Attention Module)模块,并采用分阶段微调策略的实践过程。通过这个过程,我不仅提升…...
【位运算】消失的两个数字(hard)
消失的两个数字(hard) 题⽬描述:解法(位运算):Java 算法代码:更简便代码 题⽬链接:⾯试题 17.19. 消失的两个数字 题⽬描述: 给定⼀个数组,包含从 1 到 N 所有…...
IoT/HCIP实验-3/LiteOS操作系统内核实验(任务、内存、信号量、CMSIS..)
文章目录 概述HelloWorld 工程C/C配置编译器主配置Makefile脚本烧录器主配置运行结果程序调用栈 任务管理实验实验结果osal 系统适配层osal_task_create 其他实验实验源码内存管理实验互斥锁实验信号量实验 CMISIS接口实验还是得JlINKCMSIS 简介LiteOS->CMSIS任务间消息交互…...
【SSH疑难排查】轻松解决新版OpenSSH连接旧服务器的“no matching...“系列算法协商失败问题
【SSH疑难排查】轻松解决新版OpenSSH连接旧服务器的"no matching..."系列算法协商失败问题 摘要: 近期,在使用较新版本的OpenSSH客户端连接老旧SSH服务器时,会遇到 "no matching key exchange method found", "n…...
Razor编程中@Html的方法使用大全
文章目录 1. 基础HTML辅助方法1.1 Html.ActionLink()1.2 Html.RouteLink()1.3 Html.Display() / Html.DisplayFor()1.4 Html.Editor() / Html.EditorFor()1.5 Html.Label() / Html.LabelFor()1.6 Html.TextBox() / Html.TextBoxFor() 2. 表单相关辅助方法2.1 Html.BeginForm() …...
深入浅出Diffusion模型:从原理到实践的全方位教程
I. 引言:生成式AI的黎明 – Diffusion模型是什么? 近年来,生成式人工智能(Generative AI)领域取得了爆炸性的进展,模型能够根据简单的文本提示创作出逼真的图像、连贯的文本,乃至更多令人惊叹的…...
数据结构:递归的种类(Types of Recursion)
目录 尾递归(Tail Recursion) 什么是 Loop(循环)? 复杂度分析 头递归(Head Recursion) 树形递归(Tree Recursion) 线性递归(Linear Recursion)…...
Unity VR/MR开发-VR开发与传统3D开发的差异
视频讲解链接:【XR马斯维】VR/MR开发与传统3D开发的差异【UnityVR/MR开发教程--入门】_哔哩哔哩_bilibili...
Linux安全加固:从攻防视角构建系统免疫
Linux安全加固:从攻防视角构建系统免疫 构建坚不可摧的数字堡垒 引言:攻防对抗的新纪元 在日益复杂的网络威胁环境中,Linux系统安全已从被动防御转向主动免疫。2023年全球网络安全报告显示,高级持续性威胁(APT)攻击同比增长65%,平均入侵停留时间缩短至48小时。本章将从…...

