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

【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.kler.cn/a/529579.html

相关文章:

  • 【PyQt】lambda函数,实现动态传递参数
  • PyTorch框架——基于深度学习YOLOv8神经网络学生课堂行为检测识别系统
  • 基于单片机的盲人智能水杯系统(论文+源码)
  • WebForms DataList 深入解析
  • C++:虚函数与多态性习题2
  • EasyExcel使用详解
  • AI技术路线(marked)
  • LeetCode 344: 反转字符串
  • Zabbix 推送告警 消息模板 美化(钉钉Webhook机器人、邮件)
  • 无人机飞手光伏吊运、电力巡检、农林植保技术详解
  • kamailio的kamctl的使用
  • [c语言日寄]C语言类型转换规则详解
  • ZYNQ-AXI DMA+AXI-S FIFO回环学习
  • DirectShow过滤器开发-读视频文件过滤器(再写)
  • 本地缓存~
  • 功防世界 Web_php_include
  • 理解红黑树
  • word2vec 实战应用介绍
  • Kotlin 协程 与 Java 虚拟线程对比测试(娱乐性质,请勿严谨看待本次测试)
  • VSCode设置内容字体大小
  • DeepSeek R1本地化部署 Ollama + Chatbox 打造最强 AI 工具
  • 【 软件测试项目实战】 以淘宝网购物车管理功能为例
  • 扩散模型(二)
  • kamailio-ACC、ACC_JSON 和 ACC_RADIUS 的区别
  • android java系统弹窗的基础模板
  • Clion开发STM32时使用stlink下载程序与Debug调试