数据结构实验之图论八:欧拉回路

题目描述

在哥尼斯堡的一个公园里,有七座桥将普雷格尔河中两个岛及岛与河岸连接起来。



能否走过这样的七座桥,并且每桥只走一次?瑞士数学家欧拉最终解决了这个问题并由此创立了拓扑学。欧拉通过对七桥问题的研究,不仅圆满地回答了哥尼斯堡七桥问题,并证明了更为广泛的有关一笔画的三条结论,人们通常称之为欧拉定理。对于一个连通图,通常把从某结点出发一笔画成所经过的路线叫做欧拉路。人们又通常把一笔画成回到出发点的欧拉路叫做欧拉回路。具有欧拉回路的图叫做欧拉图。

你的任务是:对于给定的一组无向图数据,判断其是否成其为欧拉图?

输入

连续T组数据输入,每组数据第一行给出两个正整数,分别表示结点数目N(1 < N <= 1000)和边数M;随后M行对应M条边,每行给出两个正整数,分别表示该边连通的两个结点的编号,结点从1~N编号。 

输出

若为欧拉图输出1,否则输出0。

示例输入

1
6 10
1 2
2 3
3 1
4 5
5 6
6 4
1 4
1 6
3 4
3 6

示例输出

1

提示

如果无向图连通并且所有结点的度都是偶数,则存在欧拉回路,否则不存在。



/*
 判断欧拉回路是否存在的方法
 有向图:图连通,所有顶点的初度等于入度;
 无向图:图连通,所有顶点都是偶数度
 程序实现一般是如下过程:
 1.判断图是否连通,(利用dfs)
 2:根据出度入度个数,判断是否满足要求,
 3:利用dfs输出路径。
*/
#include <iostream>
#include<cstdio>
#include<cstdlib>
#include<cstring>
#define INF 0x3f3f3f3f
using namespace std;
int a[1000][1000];//顶点之间的关系;
int v[1000];//标记数组;
int degree[1000];//每个顶点的度;
int n,m;
void dfs(int i)//深度优先搜索;
{
    int j;
    v[i]=1;
    for(j=1;j<=n;j++)
        if(!v[j]&&a[i][j]==1)
            dfs(j);
}
int count;
int dfs1(int n)//判定是否为连通图
{
    int j;
    for(j=1;j<=n;j++)
        if(!v[j])
    {
        count++;
        dfs(j);
    }
    return count;
}
int main()
{
    int v1,v2,t,i,j;
    scanf("%d",&t);
    while(t--)
    {
        scanf("%d%d",&n,&m);
        memset(degree,0,sizeof(degree));//每个节点度数初始化;
        memset(v,0,sizeof(v));
        for(i=1;i<=n;i++)
             for(j=1;j<=n;j++)
              a[i][j]=INF;//规定任意两个节点之间的关系为无穷大;
              while(m--)
              {
                  scanf("%d%d",&v1,&v2);
                  degree[v1]++;
                  degree[v2]++;
                  a[v1][v2]=a[v2][v1]=1;
              }
       count=0;
       int flag=1;//是否有欧拉回路的标记
       dfs1(n);
       if(count!=1)
        flag=0;//不是连通图;
        for(i=1;i<=n;i++)
       if(degree[i]%2!=0)
        {
            flag=0;//不存在欧拉回路;
            break;
        }
       if(flag==0)
        printf("0\n");
       else
        printf("1\n");
    }
    return 0;



#include<iostream>
#include<cstring>
#include<cstdio>
using namespace std;
int map[1010][1010],vis[10101],d[1010];
int n,m,u,v;
int sum;
void dfs(int num)
{
  int i;
   vis[num]=1;
   sum++;
   for(i=1;i<=n;i++)
     if(vis[i]==0&&map[num][i])
       dfs(i);
}
int main()
{
  int t;
  cin>>t;
  int i;
  while(t--)
  {
  memset(map,0,sizeof(map));
  memset(vis,0,sizeof(vis));
  memset(d,0,sizeof(d));
    cin>>n>>m;
    while(m--)
    {
      cin>>u>>v;
      map[u][v]=map[v][u]=1;
      d[u]++;
      d[v]++;
    }
    sum=0;
    dfs(u);
    for(i=1;i<=n;i++)
    {
       if(d[i]%2==1)
         break;
    }
    if(i==n+1&&sum==n)
      printf("1\n");
      else
      printf("0\n");
  }


}

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

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

相关文章

Linux面试相关

1.TCP/IP 建立连接的过程&#xff1f;&#xff08;3-way shake&#xff09; Client与server建立TCP连接时&#xff1a;首先Client向server发SYN&#xff08;请求&#xff09;&#xff0c;然后server回复&#xff08;应答请求&#xff09;&#xff0c;最后Client回复&#xff0c…

网络编程之 传输层的协议TCP与UDP

传输层协议: TCP和UDP的区别: TCP&#xff1a;面向连接(经历三次握手)、传输可靠(保证数据正确性,保证数据顺序)、用于传输大量数据(流模式)、速度慢&#xff0c;建立连接需要开销较多(时间&#xff0c;系统资源)。 服务端和客户端 UDP&#xff1a;面向非连接、传输不可靠(丢…

n a^o7 !

题目描述 All brave and intelligent fighters, next you will step into a distinctive battleground which is full of sweet and happiness. If you want to win the battle, you must do warm-up according to my instructions, which can make you in the best state prep…

socket阻塞与非阻塞,同步与异步

转自&#xff1a;http://blog.csdn.net/hguisu/article/details/7453390 socket阻塞与非阻塞&#xff0c;同步与异步 作者&#xff1a;huangguisu 1. 概念理解 在进行网络编程时&#xff0c;我们常常见到同步(Sync)/异步(Async)&#xff0c;阻塞(Block)/非阻塞(Unblock)四种调…

网络编程之如何通过URL获取网页代码

java.net 类 URL java.lang.Objectjava.net.URL所有已实现的接口&#xff1a; Serializable public final class URLextends Objectimplements Serializable类 URL 代表一个统一资源定位符&#xff0c;它是指向互联网“资源”的指针。资源可以是简单的文件或目录&#xff0c;…

数据结构实验之图论七:驴友计划

题目描述 做为一个资深驴友&#xff0c;小新有一张珍藏的自驾游线路图&#xff0c;图上详细的标注了全国各个城市之间的高速公路距离和公路收费情况&#xff0c;现在请你编写一个程序&#xff0c;找出一条出发地到目的地之间的最短路径&#xff0c;如果有多条路径最短&#xff…

Windows完成端口(IOCP)

http://blog.csdn.net/piggyxp/article/details/6922277

图结构练习——最小生成树

题目描述 有n个城市&#xff0c;其中有些城市之间可以修建公路&#xff0c;修建不同的公路费用是不同的。现在我们想知道&#xff0c;最少花多少钱修公路可以将所有的城市连在一起&#xff0c;使在任意一城市出发&#xff0c;可以到达其他任意的城市。 输入 输入包含多组数据&a…

Windows 中_T和L

_T("")是一个宏&#xff0c;定义于tchar.h下。[1]&#xfeff; #define _T(x) _ _T(x)   #ifdef _UNICODE #define _ _T(x) L ## x #else /* ndef _UNICODE */ #define _ _T(x) x 他的作用是让你的程序支持Unicode编码 因为Windows使用两种字符集ANSI和UN…

多线程笔记补充之线程通信wait和notify方法以及Lock和Condition接口的使用

线程通信-wait和notify方法介绍: java.lang.Object类提供类两类用于操作线程通信的方法. wait():执行该方法的线程对象释放同步锁,JVM把该线程存放到等待池中,等待其他的线程唤醒该线程. notify:执行该方法的线程唤醒在等待池中等待的任意一个线程,把线程转到锁池中等待. notif…

数据结构实验之图论六:村村通公路

题目描述 当前农村公路建设正如火如荼的展开&#xff0c;某乡镇政府决定实现村村通公路&#xff0c;工程师现有各个村落之间的原始道路统计数据表&#xff0c;表中列出了各村之间可以建设公路的若干条道路的成本&#xff0c;你的任务是根据给出的数据表&#xff0c;求使得每个村…

技术人生“白天求生存,晚上谋发展”

白天求生存&#xff0c;晚上谋发展 这句话最近在团队经常有人说&#xff0c;其实我也深有体会&#xff0c;因为我看到的技术牛人他们背后肯定有一段很长时间的艰苦时光&#xff0c;可能是3年&#xff0c;也可能是8年&#xff0c;也可能一直还在坚持。 其实我们周围大部份人有一…

CRT

当C Runtime函数库于20世纪70年代产生出来时&#xff0c;PC的内存容量还很小,多任务是个新奇观念&#xff0c;更别提什么多线程了。因此以当时产品为基础所演化的C Runtime函数库在多线程&#xff08;multithreaded&#xff09;的表现上有严重问题&#xff0c;无法被多线程程序…

java多线程笔记补充之线程的生命周期

多线程通信的时候很容易造成死锁,死锁无法解决,只能避免: 当A线程等待由B线程持有的锁,而B线程正在等待A线程持有的锁时,发生死锁现象,JVM不检测也不试图避免这种情况,所以程序员必须保证不导致死锁. 避免死锁法则: 当多个线程都要访问共享的资源A,B,C时,保证每一个线程都按照…

图结构练习——BFSDFS——判断可达性

题目描述 在古老的魔兽传说中&#xff0c;有两个军团&#xff0c;一个叫天灾&#xff0c;一个叫近卫。在他们所在的地域&#xff0c;有n个隘口&#xff0c;编号为1..n&#xff0c;某些隘口之间是有通道连接的。其中近卫军团在1号隘口&#xff0c;天灾军团在n号隘口。某一天&…

关于跨dll的模板单例问题

C的模板可以帮助我们编写适合不同类型的模板类&#xff0c;给代码的复用性提供了极大的方便。近来写了一个涉及单例的C模板类&#xff0c;简化下来可以归结为以下的代码&#xff1a; 1234567891011template <typename T>class Singleton{public:// 此处省去了多线程安全锁…

java多线程笔记补充之 线程控制操作

线程休眠:让执行的线程暂停一段时间&#xff0c;进入计时等待状态。 方法:staticvoid sleep(long millis) 调用sleep后&#xff0c;当前线程放弃CPU,在指定时间段之内&#xff0c;sleep所在线程不会获得执行的机会。 此状态下的线程不会释放同步锁/同步监听器. 该方法更多的用…

图结构练习——BFS——从起始点到目标点的最短步数

题目描述 在古老的魔兽传说中&#xff0c;有两个军团&#xff0c;一个叫天灾&#xff0c;一个叫近卫。在他们所在的地域&#xff0c;有n个隘口&#xff0c;编号为1..n&#xff0c;某些隘口之间是有通道连接的。其中近卫军团在1号隘口&#xff0c;天灾军团在n号隘口。某一天&…

C++中的Dll内存问题

这两天在做一个数据结构&#xff0c;使用树结构&#xff0c;两层&#xff0c;第一层的数据元素为第二层的n个分支 遇到问题如下&#xff1a; 1&#xff1a;使用vector在debug下运行正常&#xff0c;在release下源码运行正常封装后运行失败 请教了多人&#xff0c;觉得可能是vec…