zoukankan      html  css  js  c++  java
  • 判断是否存在哈密顿路--HDU 5424

    题意:给一张无向图,判断是否是哈密顿图。

    哈密顿路:经过每个点有且仅有一次的一条通路。

    方法:每次找度数最小的点作为起点,然后dfs整个图,看能遍历到的点的数目能否达到n。

     1 #include<iostream>
     2 #include<cstdio>
     3 #include<ctime>
     4 #include<cmath>
     5 #include<cstring>
     6 #include<algorithm>
     7 #include<queue>
     8 #include<vector>
     9 #include<climits>
    10 #include<set>
    11 using namespace std;
    12 const int maxn=1100,inf=1E9;
    13 vector<int>g[maxn];
    14 int n,vis[maxn],dep,cnt;
    15 bool dfs(int u)
    16 {
    17     if(dep == n)
    18         return true;
    19     for(int i=0; i<g[u].size(); i++)
    20     {
    21         int v = g[u][i];
    22         if(vis[v])
    23             continue;
    24         vis[v] = true;
    25         dep++;
    26         if(dfs(v))
    27             return true;
    28         dep -- ;
    29         vis[v] = 0;
    30     }
    31     return false;
    32 }
    33 int main()
    34 {
    35     int u,v;
    36     while(scanf("%d",&n) != -1)
    37     {
    38         for(int i=1; i<=n; i++)
    39             g[i].clear();
    40         for(int i=1; i<=n; i++)
    41         {
    42             scanf("%d%d",&u,&v);
    43             g[u].push_back(v);
    44             g[v].push_back(u);
    45         }
    46         int head=0,cnt=0;
    47         for(int i=1; i<=n; i++)
    48             if(g[i].size() == 1)
    49             {
    50                 head=i;///找起点
    51                 cnt++;
    52             }
    53         if(cnt>2)///如果度数为1的点超过两个
    54         {
    55             puts("NO");
    56             continue;
    57         }
    58         memset(vis,0,sizeof(vis));
    59         if(head == 0)
    60             head=1;///没有度数为1,即是个环
    61         dep=1;
    62         if(dfs(head))
    63             puts("YES");
    64         else puts("NO");
    65     }
    66 }
    View Code

     

  • 相关阅读:
    Python之socket_tcp
    Python之多进程&异步并行
    Qt forever关键字
    Qt程序在XP系统上不能正常运行
    Qt多线程的使用
    QScrollArea
    QtoolButton
    QComboBox
    Qt播放音频文件
    Qt5.9.1编译oracle驱动
  • 原文地址:https://www.cnblogs.com/ACMERY/p/4771259.html
Copyright © 2011-2022 走看看