zoukankan      html  css  js  c++  java
  • 计蒜客 | 欧拉回图 | 判断欧拉回路

    你学过一笔画问题么?其实一笔画问题又叫欧拉回路,是指在画的过程中,笔不离开纸,且图中每条边仅画一次,而且可以回到起点的一条回路。

    蒜头君打算考考你,给你一个图,问是否存在欧拉回路?

    输入格式

    第 11 行输入两个正整数,分别是节点数 N(1 < N < 1000)N(1<N<1000) 和边数 M(1 < M < 100000)M(1<M<100000);

    紧接着 MM 行对应 MM 条边,每行给出一对正整数,分别是该条边直接连通的两个节点的编号(节点从 11 到 NN 编号)。

    输出格式

    若存在欧拉回路则输出 11,否则输出 00。

    样例输入

    10 11
    1 2
    2 3
    3 4
    4 5
    5 6
    6 7
    7 8
    8 9
    9 10
    10 3
    3 1

    样例输出

    1
     1 #include<bits/stdc++.h>
     2 using namespace std;
     3 
     4 int MAP[1005][1005];
     5 int degree[1005];
     6 int  visited[1005];
     7 void init(int n)  //初始化 
     8 {
     9     for(int i = 0; i <= n; i++)
    10         for(int j = 0; j <= n; j++)
    11             MAP[i][j] = 0;    
    12         
    13     for(int i = 0; i <= n; i++)
    14         degree[i] = 0,visited[i] = 0;
    15         
    16 } 
    17 
    18 void dfs(int v, int n) 
    19 {
    20     visited[v] = 1;
    21     for(int i = 1; i <= n; i++)
    22     {
    23         if(!visited[i] && MAP[v][i])  dfs(i,n);
    24     }
    25 }
    26 
    27 int isConnected(int n) //判断连通图 
    28 {
    29     for(int i = 1; i <= n; i++)
    30     {
    31         if(!visited[i]) return 0;
    32     }
    33     return 1;
    34 }
    35 
    36 int isOula(int n) //判断欧拉图 
    37 {
    38     for(int i = 1; i <= n;i++)
    39     {
    40         if(degree[i]%2!=0)  return 0;
    41     }
    42     return 1;
    43 }
    44 
    45 int main()
    46 {
    47      int n,m,a,b;
    48      while(cin>>n>>m)
    49      {
    50          bool flag = false;
    51          init(n);
    52          while(m--)
    53          {
    54              scanf("%d %d",&a,&b);
    55              MAP[a][b] = MAP[b][a] = 1;
    56              degree[a]++;
    57              degree[b]++;
    58         }
    59         
    60         dfs(1,n);
    61     
    62         if(!isConnected(n)) {
    63             cout<<"0"<<endl;
    64         } 
    65         else {
    66             if(isOula(n)) cout<<"1"<<endl;
    67             else cout<<"0"<<endl;
    68         }
    69 
    70      }
    71 
    72     return 0;
    73 }
  • 相关阅读:
    248.Strobogrammatic Number III
    git Changes not staged for commit,部分修改文件不能确认
    python 文件运行时隐藏命令窗口,图形化界面隐藏cmd窗口
    python 处理配置文件
    odoo 内嵌报表的方式,iframe
    odoo 多个数据库http请求指定数据库
    jasperreportserver 免登录访问,匿名访问报表
    python 图形化界面点击按钮卡死
    python 字符反转
    pentaho 相关介绍
  • 原文地址:https://www.cnblogs.com/jj81/p/7859659.html
Copyright © 2011-2022 走看看