一笔画

一笔画  模板dfs

 1 #include<iostream>
 2 #include<queue>
 3 using namespace std;
 4 int map[110][110],du[500][500],m,n,ans[110],sum,start;
 5 void dfs(int k)
 6 {
 7
 8     for(int i=1;i<=du[k][0];i++)
 9     {
10         if(map[k][du[k][i]]==1)
11         {
12             map[k][du[k][i]]=map[du[k][i]][k]=0;
13             dfs(du[k][i]);
14         }
15     }ans[++sum]=k;
16     cout<<k<<‘ ‘;
17 }
18 int main()
19 {
20     cin>>n>>m;
21     int x,y;
22     for(int i=1;i<=m;i++)
23     {
24         cin>>x>>y;
25         map[x][y]=map[y][x]=1;
26         du[x][++du[x][0]]=y;
27         du[y][++du[y][0]]=x;
28     }
29     int cnt=0;
30     start=1;
31     for(int i=1;i<=n;i++)
32     {
33         if(du[i][0]%2==1)cnt++,start=i;
34         if(du[i][0]==0){cout<<"no";return 0;}
35     }
36     if(cnt==0||cnt==2)dfs(start);
37     else
38     {
39         cout<<"no";
40         return 0;
41     }
42 }
时间: 2024-08-08 17:51:16

一笔画的相关文章

回路(一笔画问题)

回路(一笔画问题) 一.题目 回路 时间限制: 1 Sec  内存限制: 128 MB 提交: 0  解决: 0 [提交][状态][讨论版] 题目描述 给定一个由N行M列的'.'或者'*'的图形,'*'的格子无法路过,请使用一条回路去经过所有的'.'(必须回到起点,单点不算回路). 输入 第一行:N M(1 <= N <= 12, 1 <= M <= 12) 接下来N行,每行共有M个'.'或'*' 输出 一个正整数,表示满足条件的总条数,最后答案不会超过2^63 - 1. 样例输入

JAVA学习绘图颜色及其笔画属性设置字体显示文字

package com.graphics; import java.awt.*; import java.awt.geom.Rectangle2D; import java.util.Date; import javax.swing.*; /** * * @author biexiansheng * */ public class DrawString extends JFrame{ private Shape rect;//矩形对象 private Font font;//字体对象 priva

nyoj42 一笔画问题

题目链接 分析: 若图G中存在这样一条路径,使得它恰通过G中每条边一次,则称该路径为欧拉路径.若该路径是一个圈,则称为欧拉(Euler)回路. 具有欧拉回路的图称为欧拉图(简称E图).具有欧拉路径但不具有欧拉回路的图称为半欧拉图. 先说一下欧拉路径.欧拉回路的充要条件: 1.无向连通图G是欧拉图,当且仅当G不含奇数度结点(G的所有结点度数为偶数): 2.无向连通图G含有欧拉通路,当且仅当G有零个或两个奇数度的结点: 3.有向连通图D是欧拉图,当且仅当该图为连通图且D中每个结点的入度=出度 4.有

一个Brushes笔画应用ios源码完整版

效果很不错的画笔App,提供几十种不同的画笔,包括毛笔画笔.拥有绘画App的一些基本功能,包括颜色选择.绘画保存,支持撤销(undo).重做(redo)以及橡皮擦功能等等,甚至还支持类似PhotoShop图层(layer)的功能(如第二张效果图).说明:应用的App Store地址:https://itunes.apple.com/app/id545366251.效果图: <ignore_js_op> <ignore_js_op> <ignore_js_op> <

一笔画问题

一笔画问题 如果一个图存在一笔画,则一笔画的路径叫做欧拉路,如果最后又回到起点,那这个路径叫做欧拉回路. 我们定义奇点是指跟这个点相连的边数目有奇数个的点.对于能够一笔画的图,我们有以下两个定理. 定理1:存在欧拉路的条件:图是连通的,有且只有2个奇点. 定理2:存在欧拉回路的条件:图是连通的,有0个奇点. 两个定理的正确性是显而易见的,既然每条边都要经过一次,那么对于欧拉路,除了起点和终点外,每个点如果进入了一次,显然一定要出去一次,显然是偶点.对于欧拉回路,每个点进入和出去次数一定都是相等的

NYOJ 42 一笔画

一笔画问题 时间限制:3000 ms  |  内存限制:65535 KB 难度:4 描述 zyc从小就比较喜欢玩一些小游戏,其中就包括画一笔画,他想请你帮他写一个程序,判断一个图是否能够用一笔画下来. 规定,所有的边都只能画一次,不能重复画. 输入 第一行只有一个正整数N(N<=10)表示测试数据的组数.每组测试数据的第一行有两个正整数P,Q(P<=1000,Q<=2000),分别表示这个画中有多少个顶点和多少条连线.(点的编号从1到P)随后的Q行,每行有两个正整数A,B(0<A,

Nyoj42 一笔画问题 (欧拉道路)

http://acm.nyist.net/JudgeOnline/problem.php?pid=42题目链接 #include <cstdio> #include <cstring> #define CLR(arr) memset(arr,0,sizeof(arr)) #define P 1001 int G[P],fa[P]; int find(int x){return x==fa[x]?x:x=find(fa[x]);} int main() {     int n,a,b

hdoj 3018 Ant Trip(无向图欧拉路||一笔画+并查集)

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3018 思路分析:题目可以看做一笔画问题,求最少画多少笔可以把所有的边画一次并且只画一次: 首先可以求出该无向图中连通图的个数,在每个无向连通图中求出需要画的笔数再相加即为所求.在一个无向连通图中,如果所有的点的度数为偶数则存在一个欧拉回路, 则只需要画一笔即可:如果图中存在度数为奇数的点,则需要画的笔数为度数为奇数的点的个数 /2:需要注意的孤立的点不需要画: 代码如下: #include <cst

一笔画问题x(www我会了好开心!!这次是有向图~)

考试的方面: (1)一笔画是怎样画的(水) (2)能否实现一笔画(小技巧) 1)必须连通(有向与无向都必须满足) 2)有向图:(欧拉回路)如果出度等于入度,可以从任意点搜索: (欧拉路)如果入度大于出度,则一定为终止点,而如果出度大于入度,则一定为开始的点(注意,如果入度与出度之间的差值大于一,则一定不能够形成欧拉路) 3)无向图:所有点的度数都为偶数时,才能实现欧拉回路||有两个点为奇数,且这两个点分别为起止点 一笔画性质: ■⒈凡是由偶点组成的连通图,一定可以一笔画成.画时可以把任一偶点为起

例题4.2 好看的一笔画 LA3263

1.题目描述:点击打开链接 2.解题思路:本题利用欧拉定理解决,设顶点数,边数,面数分别是V,E,F,则V+F-E=2.因此,F=E+2-V.我们只需要求解E和V的个数即可.V的个数:除了题目中输入的点,还有两两线段相交得到的新点,由于可能出现三线共点的情况,因此最后对于顶点还要使用一下unique函数去重.对于E的个数,首先是输入的n条边(因为是一笔画构成,那么n个点会连出n条边),接下来是去重后的顶点集中,由于一个顶点在一条线段上而产生的新的边,此时我们可以枚举每一个顶点,再枚举每一条线段,