2020年8月5日

一笔画问题 题解

1341:【例题】一笔画问题


时间限制: 1000 ms         内存限制: 65536 KB
提交数: 8409     通过数: 2915

【题目描述】

如果一个图存在一笔画,则一笔画的路径叫做欧拉路,如果最后又回到起点,那这个路径叫做欧拉回路。

根据一笔画的两个定理,如果寻找欧拉回路,对任意一个点执行深度优先遍历;找欧拉路,则对一个奇点执行dfs,时间复杂度为O(m+n),m为边数,n是点数。

【输入】

第一行n,m,有n个点,m条边,以下m行描述每条边连接的两点。

【输出】

欧拉路或欧拉回路,输出一条路径即可。

【输入样例】

5 5
1 2
2 3
3 4
4 5
5 1

【输出样例】

1 5 4 3 2 1

 今天为大家带来一道图论的题----------一笔画问题。读完题后便有一种思路:利用一个二维数组作为邻接矩阵来存储输入图边的信息,无边即为0,有边记为1,并用一维数组记录每个点的度,再利用另一个一维数组记录路径经过的点,以便最后输出。

利用每个点的度判断出哪些点是奇点,深搜奇点,判断找出其邻接点,将邻接点记为已搜过,继续深搜邻接点的邻接点,直至循环结束,将其点i计入数组d保存此路径

最后输出,即为正解

讲了这么多,下面放出AC代码:

#include<bits/stdc++.h>
using namespace std;
int mapn[1005][1005];//邻接矩阵
int n,m;
int s[105];
int c=0;//控制路径记录数组的下标
int d[2005];//记录路径
void dfs(int i)
{
for(int j=1;j<=n;j++)
{
if(mapn[i][j]==1)
{
mapn[i][j]=0;
mapn[j][i]=0;//将其标为已搜过
dfs(j);//深搜下一个邻接点
}
}
d[++c]=i;//记录路径经过的点
}
int main()
{
memset(mapn,0,sizeof(mapn));
cin>>n>>m;
int a,b;
for(int i=1;i<=m;i++)
{
cin>>a>>b;
mapn[a][b]=1;
mapn[b][a]=1;
s[a]++;
s[b]++;//记录点的度为下面判断奇点做铺垫
}
int t=1;//定义t并给予初始值
for(int i=1;i<=n;i++)
{
if(s[i]%2==1)
{
t=i;
}//如果此点是奇点
}
dfs(t); //深搜奇点
for(int i=1;i<=c;i++)
{
cout<<d[i]<<" ";
}//输出记下的路径数组
cout<<endl;
return 0;
}

posted @ 2020-08-05 21:27 田宸玮 阅读(719) 评论(0) 推荐(0) 编辑

2020年8月4日

素数环 题解

摘要: 素数环:从1 到n这n 个数摆成一个环,要求相邻的两个数的和是一个素数。 给定n的取值,输出其解所有的排列方式及解的个数 样例输入 6 样例输出 <1>1 4 3 2 5 6 <2>1 6 5 2 3 4 2 注:此题素数环拥有多种输入输出格式,小编只是举例说明。此程序只支持,输入填入数的范围,输出 阅读全文

posted @ 2020-08-04 21:59 田宸玮 阅读(906) 评论(0) 推荐(0) 编辑

2020年8月1日

没有上司的舞会 题解

摘要: 没有上司的舞会 时间限制:0秒 内存限制:128M 题目描述 Ural大学有N个职员,编号为1~N。他们有从属关系,也就是说他们的关系就像一棵以校长为根的树,父结点就是子结点的直接上司。每个职员有一个快乐指数。现在有个周年庆宴会,要求与会职员的快乐指数最大。但是,没有职员愿和直接上司一起与会。 输入 阅读全文

posted @ 2020-08-01 22:52 田宸玮 阅读(238) 评论(0) 推荐(0) 编辑

2020年7月30日

传纸条 题解

摘要: 传纸条 时间限制:1秒 内存限制:128M 题目描述 小渊和小轩是好朋友也是同班同学,他们在一起总有谈不完的话题。一次素质拓展活动中,班上同学安排做成一个m行n列的矩阵,而小渊和小轩被安排在矩阵对角线的两端,因此,他们就无法直接交谈了。幸运的是,他们可以通过传纸条来进行交流。纸条要经由许多同学传到对 阅读全文

posted @ 2020-07-30 23:50 田宸玮 阅读(325) 评论(0) 推荐(0) 编辑

最大子矩阵和 题解

摘要: 最大子矩阵和 时间限制:1秒 内存限制:128M 题目描述 已知矩阵的大小定义为N*N的矩阵中所有元素的和。给定一个矩阵,你的任务是找到最大的非空子矩阵。 输入描述 输入的第一行给出N(0<N≤100)。再后面的若干行中,依次(首先从左到右给出第一行的N个整数,再从左到右给出第二行的N个整数……)给 阅读全文

posted @ 2020-07-30 12:13 田宸玮 阅读(199) 评论(0) 推荐(0) 编辑

最大子段和 题解

摘要: 最大子段和 时间限制:1秒 内存限制:128M 题目描述 小可喜欢思考人生的意义,她发现每个人的一生不可能一帆风顺,或多或少总要经过坎坷挫折的考验。于是她将人的一生的每个关键时间点以数值表示,快乐越高,分值越高,痛苦值越高,分值越低甚至会成为负数。进一步研究,她又发现人的记忆总是会记住那些快乐的时光 阅读全文

posted @ 2020-07-30 11:22 田宸玮 阅读(231) 评论(0) 推荐(0) 编辑

2020年7月29日

合唱队形 题解

摘要: 合唱队形 时间限制:1秒 内存限制:128M 题目描述 N位同学站成一排,音乐老师要请其中的(N−K)位同学出列使得剩下的K位同学排成合唱队形。 合唱队形是指这样的一种队形:设K位同学从左到右依次编号为1,2,…,K,他们的身高分别T1,T2,…,TK,则他们的身高满足T1<T2<…<Ti,Ti>T 阅读全文

posted @ 2020-07-29 22:22 田宸玮 阅读(742) 评论(0) 推荐(0) 编辑

最长上升子序列 题解

摘要: 最长上升子序列 时间限制:1秒 内存限制:128M 题目描述 一个数的序列bi,当b1 < b2 < ... < bS的时候,我们称这个序列是上升的。对于给定的一个序列(a1, a2, ..., aN),我们可以得到一些上升的子序列(ai1, ai2, ..., aiK),这里1 <= i1 < i 阅读全文

posted @ 2020-07-29 12:01 田宸玮 阅读(440) 评论(0) 推荐(0) 编辑

2020年6月10日

求最大公约数和最小公倍数

摘要: 求最大公约数和最小公倍数 时间限制:1秒 内存限制:128M 题目描述 给出两个正整数,求出它们的最大公约数和最小公倍数。 输入描述 第一行输入一个整数n(0<n<=10000),表示有n组测试数据;随后的n行输入两个整数i,j(0<i,j<=32767)。 输出描述 输出每组测试数据的最大公约数和 阅读全文

posted @ 2020-06-10 20:55 田宸玮 阅读(188) 评论(0) 推荐(0) 编辑

找树根和孩子

摘要: 找树根和孩子 时间限制:1秒 内存限制:128M 题目描述 给定一棵树,输出树的根root,孩子最多的结点max以及他的孩子。 输入描述 第一行:n(结点个数≤100),m(边数≤200)。以下m行:每行两个结点x和y,表示y是x的孩子(x,y≤100)。 输出描述 第一行:树根:root;第二行: 阅读全文

posted @ 2020-06-10 20:23 田宸玮 阅读(250) 评论(0) 推荐(0) 编辑

< 2025年2月 >
26 27 28 29 30 31 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 1
2 3 4 5 6 7 8

导航

统计

点击右上角即可分享
微信分享提示