zoukankan      html  css  js  c++  java
  • 哈密尔顿环

     1 #include<iostream>
     2 #include<cstring>
     3 using namespace std;
     4 int start,length,x,n;
     5 bool visited[101],v1[101];
     6 int ans[101], num[101];
     7 int g[101][101];
     8 void print() {
     9     int i;
    10     for (i = 1; i <= length; i++)
    11         cout << ' ' << ans[i];
    12     cout << endl;
    13 }
    14 void dfs(int last,int i)
    15 //访问点i,last表示上次访问的点
    16 {
    17     visited[i] = true;        //标记为已经访问过
    18     v1[i] = true;           //标记为已在一张图中出现过,不用回溯 
    19     ans[++length] = i;                //记录下答案
    20     for (int j = 1; j <= num[i]; j++) 
    21     {
    22         if (g[i][j]==x &&  g[i][j]!=last) 
    23         { //回到起点,构成哈密尔顿环
    24             ans[++length] = g[i][j];
    25             print();           //这里说明找到了一个环,则输出ans数组。
    26             length--;
    27             break;
    28         }
    29         if (!visited[g[i][j]]) dfs(i,g[i][j]);//遍历与i相关联所有未访问过的顶点
    30     }
    31     length--;
    32     visited[i] = false;       //这里是回溯过程,注意v1的值不恢复。
    33 }
    34 int main() {
    35     cin>>n;
    36     int m;
    37     cin>>m;
    38     for(int i=1; i<=m; i++) {
    39         int x,y;
    40         cin>>x>>y;
    41         g[x][++num[x]]=y;//此x点能够通往几条边,边 
    42         g[y][++num[y]]=x;//此y点能够通往几条边,边 
    43     }
    44     for (x = 1; x <= n; x++)
    45         //每一个点都作为起点尝试访问,因为不是从任何一点开始都能找过整个图的
    46         if (!v1[x]) {            //如果点x不在之前曾经被访问过的图里。
    47             length = 0;      //定义一个ans数组存答案,length记答案的长度。
    48             dfs(0,x);
    49         }
    50     return 0;
    51 }
  • 相关阅读:
    Fody is only supported on MSBuild 16 and above
    abp发送邮件AbpMailKit
    看一位老司机的博文,分享一下。
    nginx PC 移动配置
    微信开放平台登录
    flask 中 session的源码解析
    python mac环境搭建
    前端换mac可以参考搭一下简单的环境
    vue 导航钩子
    HTML5 History 模式
  • 原文地址:https://www.cnblogs.com/lyqlyq/p/6683126.html
Copyright © 2011-2022 走看看