一笔画--PTA

文章目录

  • 题目描述
  • 思路
  • AC代码

题目描述

在这里插入图片描述
在这里插入图片描述

输入样例1
3 2
1 2
2 3
输出样例1
Y输入样例2
4 3
1 2
1 3
1 4
输出样例2
N输入样例3
1 0
输出样例3
Y

思路

dfs 、欧拉通路、欧拉回路的判定

前导知识

欧拉通路欧拉回路欧拉图
无向图:
①设G是连通无向图,则称经过G的每条边一次并且仅一次的路径为欧拉通路
②如果欧拉通路是回路(起点和终点是同一个顶点),则称此回路为欧拉回路
有向图:
①设D是有向图,D的基图连通,则称经过D的每条边一次并且仅一次的有向路径为有向欧拉通路
②如果有向欧拉通路是有向回路,则称此有向回路为有向欧拉回路
总结
欧拉通路就是从点①出发,到点②,(①②不一定相同)经过该连通图所有路径仅一次;
欧拉回路就是点①和点②一定相同

欧拉通路的判定
①无向图:图连通,只有两个顶点是奇数度,其余都是偶数度的
②有向图:图连通,有一个顶点出度大入度1,有一个顶点入度大出度1,其余都是出度=入度

欧拉回路的判定
①无向图:图连通,所有顶点都是偶数度。
②有向图:图连通,所有的顶点出度=入度。

存储结构
1.二维数组g存储图
2.一维数组cnt统计每个点的度数
3.一位数组vis标记每个数组是否被访问过

具体做法
1.使用邻接矩阵构建图,同时统计每个点的度数
2.该图可以一笔画,肯定存在欧拉通路或者欧拉回路,二者都要考虑,根据前面无向图欧拉通路和欧拉回路的判定知,需要首先满足度数条件,否则该图肯定不能一笔画
3.从每个点进行一次dfs,判断图是否可以连通

AC代码

#include <bits/stdc++.h>
using namespace std;
const int N = 1010;
int g[N][N]; //存储节点间的关系
bool vis[N]; //标记每个点是否都被访问过
int cnt[N]; //统计每个点的度数
int num; //统计度数为奇数的点的个数
bool flag; //标记是否可以一笔画
int n, m;void dfs(int x)
{for(int i = 1; i <= n; i ++){if(g[x][i] && !vis[i]){vis[i] = true;dfs(i);}}
}
int main()
{scanf("%d%d", &n, &m);for(int i = 0; i < m; i ++){int x, y;scanf("%d%d", &x, &y);g[x][y] = 1;g[y][x] = 1;cnt[x] ++;cnt[y] ++;}for(int i = 1; i <= n; i ++){if(cnt[i] % 2 == 1) num ++;}if(num != 2 && num != 0) printf("N\n"); //不满足存在欧拉通路 或者 欧拉回路的条件else{for(int i = 1; i <= n; i ++){memset(vis, false, sizeof(vis));vis[i] = true; //起点初始化为访问过flag = true; //假设本次从i出发可以一笔画完dfs(i);for(int j = 1; j <= n; j ++){if(!vis[j]){flag = false;break;}}if(flag) break;}if(flag) printf("Y\n");else printf("N\n");}return 0;
}

欢迎大家批评指正!!!

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

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

相关文章

集合一:List

一&#xff1a;集合简介&#xff1a; 1、定义&#xff1a; 集合是由若干个确定的元素所构成的整体&#xff0c;在程序中一般代表保存若干个元素&#xff08;数据&#xff09;的某种容器。 2、为什么要用集合&#xff1a; 通过定义可知&#xff0c;集合就是由若干元素组成的…

在Linux中同一个tomcat出现多个进程

第一步&#xff0c;查看服务器所有的启动进程。 命令&#xff1a;top -c 第二步&#xff0c;通过点击“shiftM”&#xff0c;按照内存大小排序&#xff1b;点击“shiftP”&#xff0c;按照CPU大小排序。 在[COMMAND]列找到相同的tomcat进程&#xff0c;可以得到对应的PID。 …

阿里云轻量应用服务器和云服务器ECS有什么区别?

阿里云服务器ECS和轻量应用服务器有什么区别&#xff1f;轻量和ECS优缺点对比&#xff0c;云服务器ECS是明星级云产品&#xff0c;适合企业专业级的使用场景&#xff0c;轻量应用服务器是在ECS的基础上推出的轻量级云服务器&#xff0c;适合个人开发者单机应用访问量不高的网站…

鸿蒙一次开发,多端部署(十二)资源使用

在页面开发过程中&#xff0c;经常需要用到颜色、字体、间距、图片等资源&#xff0c;在不同的设备或配置中&#xff0c;这些资源的值可能不同。有两种方式处理&#xff1a; 应用资源&#xff1a;借助资源文件能力&#xff0c;开发者在应用中自定义资源&#xff0c;自行管理这些…

【LeetCode: 120. 三角形最小路径和 + 动态规划】

&#x1f680; 算法题 &#x1f680; &#x1f332; 算法刷题专栏 | 面试必备算法 | 面试高频算法 &#x1f340; &#x1f332; 越难的东西,越要努力坚持&#xff0c;因为它具有很高的价值&#xff0c;算法就是这样✨ &#x1f332; 作者简介&#xff1a;硕风和炜&#xff0c;…

Zero-Change Object Transmission for Distributed Big Data Analytics——论文泛读

ATC 2022 Paper 问题 分布式大数据分析在很大程度上依赖于Java和Scala等高级语言的可靠性和多功能性。然而&#xff0c;这些高级语言也为数据传输制造了障碍。要在Java虚拟机&#xff08;JVM&#xff09;之间传输数据&#xff0c;发送方应将对象转换为字节数组&#xff08;序…

nvidia显卡如何安装cuda驱动

目录 查看显卡对应的cuda版本下载与你显卡匹配的CUDA Toolkit 查看显卡对应的cuda版本 按 微软 R 键&#xff0c;输入cmd 然后输入 nvidia-smi &#xff0c;回车显示下面信息&#xff1a; 看到 CUDA Version 为 12.2 下载与你显卡匹配的CUDA Toolkit 打开网页&#xff1a…

iOS UIFont-新增第三方字体

背景 在项目中添加三方字体&#xff0c;是在开发中比较常见的需求&#xff0c;每次新增字体&#xff0c;都会遗忘其中某个步骤&#xff0c;又要去百度一下才能把字体添加使用成功。每次这样有点浪费时间和打击自信&#xff0c;于是便想着&#xff0c;自己好好来理一理新增字体…

谈谈MySQL的索引

索引其实是MySQL里面的内容&#xff0c;而且我感觉是很高频的。我看了好多关于索引的文章&#xff0c;但是总感觉很困惑&#xff0c;虽然我之前在面试的时候没有被问过&#xff0c;但是我总感觉这很重要。而且&#xff0c;我希望将这个知识点有条理、有逻辑的说出来&#xff0c…

Cmake和opencv环境安装

1 Cmake下载及安装 Download CMake 根据需要下载&#xff0c;历史版本下载方法如下 CMake 的版本号中的后缀 "rc1" 和 "rc2" 表示 Release Candidate 1 和 Release Candidate 2&#xff0c;它们都是候选版本&#xff0c;用于测试新功能和修复 bug。通常情…

突破编程_C++_C++11新特性(type_traits的属性类型特性以及操作类型特性)

1 type_traits 的属性类型特性 1.1 std::alignment_of std::alignment_of 是一个模板类&#xff0c;用于获取类型的对齐要求。对齐是指数据在内存中的位置&#xff0c;某些硬件平台可能要求特定类型的数据位于特定地址的边界上。 定义&#xff1a; template< class T &g…

Github 2024-03-23 Rust开源项目日报 Top10

根据Github Trendings的统计,今日(2024-03-23统计)共有10个项目上榜。根据开发语言中项目的数量,汇总情况如下: 开发语言项目数量Rust项目10Dart项目1RustDesk: 用Rust编写的开源远程桌面软件 创建周期:1218 天开发语言:Rust, Dart协议类型:GNU Affero General Public Li…

在离线的arm架构kylin v10服务器上使用Kuboard-Spray搭建K8S集群

在离线的arm架构kylin v10服务器上使用Kuboard-Spray搭建K8S集群 在内网项目中需要安装K8S集群&#xff0c;经过调研&#xff0c;选择使用Kuboard-Spray工具搭建K8S集群&#xff0c;降低学习成本&#xff0c;提高安装效率。 为了简化安装使用集群的过程&#xff0c;搭建了私有…

云计算 3月18号 (mysql安装及操作)

一、Mysql 1.1 MySQL数据库介绍 1.1.1 什么是数据库DB&#xff1f; DB的全称是database&#xff0c;即数据库的意思。数据库实际上就是一个文件集合&#xff0c;是一个存储数据的仓库&#xff0c;数据库是按照特定的格式把数据存储起来&#xff0c;用户可以对存储的数据进行…

Docker 容器中使用 RAM 角色实现云监控事件监控

准备工作 在开始之前,请确保您已经完成以下准备工作: 创建一个 RAM 角色,并为该角色授予 ​​AliyunCloudMonitorFullAccess​​ 权限。这将允许该角色执行云监控服务的所有操作,包括发送自定义事件。准备一个 Python 应用程序,用于发送自定义事件到云监控服务。您可以使用我们…

jupyter notebook和jupyter lab 找不到虚拟环境

文章目录 这里以环境Pytorch为例&#xff1a; 激活环境 conda activate Pytorch在你的环境中安装 ipykernel&#xff1a; conda install ipykernel将你的环境添加到 Jupyter 的内核列表中&#xff1a; python -m ipykernel install --user --namePytorch

spring boot高级运用:使用Spring Kafka集成Apache Kafka,实现消息的生产和消费。

使用Spring Kafka集成Apache Kafka&#xff0c;实现消息的生产和消费。 要使用Spring Kafka集成Apache Kafka来实现消息的生产和消费&#xff0c;您需要进行以下步骤&#xff1a; 添加Spring Kafka依赖&#xff1a; 在您的Spring Boot项目中&#xff0c;首先需要添加Spring …

Java面试题:结合设计模式与并发工具包实现高效缓存;多线程与内存管理优化实践;并发框架与设计模式在复杂系统中的应用

探索Java高级编程&#xff1a;综合性面试题解析 Java作为一门功能强大的编程语言&#xff0c;在企业级应用开发中占据着举足轻重的地位。本文将深入探讨Java设计模式、内存管理、多线程工具类、并发工具包和并发框架等高级知识点&#xff0c;通过三道综合性的面试题&#xff0…

Python 从0开始 一步步基于Django创建项目(4)应用Django shell查看数据模型

Django shell是Django提供的交互式环境&#xff0c;可以通过编程的方式查看数据模型中的数据。 在《Python 从0开始 一步步基于Django创建项目&#xff08;3&#xff09;》中已经向数据模型city&#xff0c;添加了两条数据&#xff1a;‘北京’、‘墨尔本’。又向数据模型entr…

2、事件修饰符、双向绑定、style样式使用、v-for循环遍历、v-if 和 v-show

一、事件修饰符 1、.stop 阻止冒泡事件 给谁加了阻止冒泡事件&#xff0c;谁下面的盒子就不会执行了 <div id"app"><div class"parent" click"log3"><div class"child" click"log2"><button click.…