当前位置: 首页 > news >正文

【xdoj-离散线上练习】T251(C++)

 解题反思:

  • 开始敲代码前想清楚整个思路比什么都重要嘤嘤嘤!
  • 看到输入m, n和矩阵,注意不能想当然地认为就是高m,宽n的矩阵,细看含义
    • 比如本题给出了树的邻接矩阵,就是n*n的,代码实现中没有用到m这个条件
  • 不熟语法
  • vector<vector<int>>tree(m, vector<int>(n, 0));
    //定义二维m*n数组tree,并将每个元素初始化为0;

题目见下

题目:任意构造一棵树,输出以指定的某一结点为根节点的子树。

问题描述

任意构造一棵树,输出以指定的某一结点为根节点的子树。下面给出一个样例示意图,输入样例的邻接矩阵,输出分别以a,c,e结点为根节点的子树。

输入格式

第一行输入图的顶点数n和边数m,第二行开始输入树的邻接矩阵(结点名称默认为1,2,3,...,n)。第n+2行输入1,2,3,...,n中选定的某一结点A。

输出格式

选择某一结A点为树根后,出现数字以及(数字1,数字2)的形式,

数字表示点,(数字1,数字2)表示以1、2为顶点的边,将各个顶点依照()里的关系组合起来,即以输入字母为顶点的子树。

样例输入

21 20

0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0

0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 0 0 0 0

0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

0 0 0 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 0

0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0

0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0

0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0

0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1

0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

3

样例输出

3 (3,7)7 (3,8)8 (8,15)15 (8,16)16

题目分析&代码实现

其实就是一个树的深度优先搜索的变形,本代码用lambda表达式实现递归函数。 

#include<bits/stdc++.h>
using namespace std;int main()
{int n, m;cin>>n>>m;vector<vector<int>>tree(n+1, vector<int>(n+1));//注意从1开始!for(int i=1; i<=n; i++){for(int j=1; j<=n; j++){	cin>>tree[i][j];}}int root; cin>>root;auto dfs = [&](auto& dfs, int cur) -> void{		for(int i=1; i<=n; i++){if(tree[cur][i] == 1){cout<<"("<<cur<<","<<i<<")"<<i<<" ";dfs(dfs, i);}}return;};cout<<root<<" ";dfs(dfs, root);return 0;
}

~希望对你有启发~

http://www.lryc.cn/news/530792.html

相关文章:

  • 定时器按键tim_key模版
  • Kanass快速安装配置教程(入门级)
  • 无用知识之:std::initializer_list的秘密
  • 论文阅读笔记 —— 英文论文常见缩写及含义
  • 实验9 JSP访问数据库(二)
  • [c语言日寄]C语言类型转换规则详解
  • Airflow:选择合适执行器扩展任务执行
  • 使用冒泡排序模拟实现qsort函数
  • AI大模型开发原理篇-4:神经概率语言模型NPLM
  • Eigen::Tensor使用帮助
  • git基础使用--3---git安装和基本使用
  • html的字符实体和颜色表示
  • OpenAI发布o3-mini:免费推理模型,DeepSeek引发的反思
  • Zemax 中带有体素探测器的激光谐振腔
  • 大模型训练(5):Zero Redundancy Optimizer(ZeRO零冗余优化器)
  • C# 实现 “Hello World” 教程
  • LabVIEW无线齿轮监测系统
  • IM 即时通讯系统-01-概览
  • 【人工智能】 在本地运行 DeepSeek 模型:Ollama 安装指南
  • 【Linux系统】信号:信号保存 / 信号处理、内核态 / 用户态、操作系统运行原理(中断)
  • 探索 Copilot:开启智能助手新时代
  • 解锁豆瓣高清海报(二) 使用 OpenCV 拼接和压缩
  • 我用Ai学Android Jetpack Compose之Card
  • NLP深度学习 DAY4:Word2Vec详解:两种模式(CBOW与Skip-gram)
  • 论文阅读(十):用可分解图模型模拟连锁不平衡
  • Python中容器类型的数据(上)
  • PySPARK带多组参数和标签的SparkSQL批量数据导出到S3的程序
  • 蓝桥杯备考:模拟算法之字符串展开
  • 使用LLaMA-Factory对AI进行认知的微调
  • @Nullable 注解