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

一笔画--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;
}

欢迎大家批评指正!!!

相关文章:

  • VSGitHub项目联动(上传和克隆),创建你的第一个仓库,小白配置
  • .NET Core 将实体类转换为 SQL(ORM 映射)
  • 文件上传二—WEB攻防-PHP应用文件上传中间件CVE解析第三方编辑器已知CMS漏洞
  • HarmonyOS NEXT应用开发之ArkWeb同层渲染
  • 自动驾驶轨迹规划之时空语义走廊(一)
  • 鸿蒙Harmony应用开发—ArkTS-ForEach:循环渲染
  • Linux环境变量【终】
  • element-ui checkbox 组件源码分享
  • 10、chrome拓展程序的实现
  • 01分布式搜索引擎ES
  • GT20L16S1Y标准汉字字库芯片完全解析(2)
  • 基于FPGA的UDP协议栈设计第三章_ARP层设计
  • RESTful架构
  • 零基础-MySQL数据库的基本操作
  • PWM脉宽调制技术
  • 2019年如何成为全栈工程师?
  • 77. Combinations
  • android 一些 utils
  • es6
  • gf框架之分页模块(五) - 自定义分页
  • mysql_config not found
  • MySQL的数据类型
  • React组件设计模式(一)
  • Sublime Text 2/3 绑定Eclipse快捷键
  • 精彩代码 vue.js
  • - 转 Ext2.0 form使用实例
  • ​queue --- 一个同步的队列类​
  • #{}和${}的区别?
  • #LLM入门|Prompt#1.7_文本拓展_Expanding
  • #我与Java虚拟机的故事#连载18:JAVA成长之路
  • (2021|NIPS,扩散,无条件分数估计,条件分数估计)无分类器引导扩散
  • (3)nginx 配置(nginx.conf)
  • (附源码)spring boot北京冬奥会志愿者报名系统 毕业设计 150947
  • (附源码)springboot家庭财务分析系统 毕业设计641323
  • (论文阅读30/100)Convolutional Pose Machines
  • (强烈推荐)移动端音视频从零到上手(上)
  • (三)docker:Dockerfile构建容器运行jar包
  • (五)Python 垃圾回收机制
  • (转)Windows2003安全设置/维护
  • (轉)JSON.stringify 语法实例讲解
  • /etc/fstab 只读无法修改的解决办法
  • [ CTF ] WriteUp- 2022年第三届“网鼎杯”网络安全大赛(白虎组)
  • [ 代码审计篇 ] 代码审计案例详解(一) SQL注入代码审计案例
  • [2019.2.28]BZOJ4033 [HAOI2015]树上染色
  • [2024最新教程]地表最强AGI:Claude 3注册账号/登录账号/访问方法,小白教程包教包会
  • [Android]创建TabBar
  • [bzoj1912]异象石(set)
  • [CareerCup] 13.1 Print Last K Lines 打印最后K行
  • [CC2642r1] ble5 stacks 蓝牙协议栈 介绍和理解
  • [codeforces]Checkpoints
  • [COGS 622] [NOIP2011] 玛雅游戏 模拟
  • [DL]深度学习_Feature Pyramid Network
  • [error] 17755#0: *58522 readv() failed (104: Connection reset by peer) while reading upstream
  • [FTP]pureftp部署和优化
  • [JavaWeb]——获取请求参数的方式(全面!!!)