• 哈密尔顿环


    定义:

    指的是不重复走过所有的点。并且最后还能回到起点的路。


    简单的深度优先搜索就能求出一张图中所有的哈密尔顿环

      1 #include <iostream>
      2 #include <algorithm>
      3 #include <cstring>
      4 
      5 using namespace std;
      6 int start, length,x,n;
      7 const int maxn = 101;
      8 bool visited[maxn], v1[maxn];
      9 int ans[maxn], num[maxn];
     10 int g[maxn][maxn];
     11 void print()
     12 {
     13 	for (int i = 1; i <= length - 1; ++ i)
     14 	{
     15 		cout << ans[i] << " ";
     16 	}
     17 	cout << ans[length] << endl;
     18 }
     19 
     20 void dfs(int last, int i)//用数组模拟邻接表存储,访问点i,last标是上一个访问的点。 
     21 {
     22 	visited[i] = true;//比哦及为已经访问过的点 
     23 	vl[i] = true;//标记已经出现在一张图中点 
     24 	ans[++length] = i;//记录下答案 
     25 	for (int j = 1; j <= num[i]; ++ j)
     26 	{
     27 		if (g[i][j] == x && g[i][j] != last)//回到起点构成哈密顿环 
     28 		{
     29 			ans[++length] = g[i][j];
     30 			print();//这里说明找到了一个环 
     31 			length--;
     32 			break;
     33 		}
     34 		if (!visited[g[i][j]]) dfs[i] = false;
     35 	}
     36 	length--;
     37 	visited[i] = false;//这里是回溯 
     38 }
     39 
     40 int main()
     41 {
     42 	memset(visited, false, sizeof(visited));
     43 	memset(vl, false, sizeof(vl));
     44 	for (x = 1; x <= n; ++ x)//每个点都做为起点尝试访问,因为不是从任何一点开始都能找到过整个图。 
     45 	{
     46 		if (!vl[x])//如果点x没被之前的图访问过 
     47 		{
     48 			length = 0; //定义一个ans数组存答案,length记录长度 
     49 			dfs(0, x);
     50 		}
     51 	}
     52 	return 0;
     53 }
    追求吾之所爱
  • 相关阅读:
    ios中的任务分段
    UVA 531
    OGG同构(ORACLE-ORACLE)、异构(ORACLE-MYSQL)同步配置及错误解析
    JavaScript自调用匿名函数
    Redis 主从配置和参数详解
    python开发环境设置(windows)
    Havel-Hakimi定理 hdu2454 / poj1695 Havel-Hakimi定理
    libevent源码分析-介绍、安装、使用
    Linux网络监控工具nethogs
    spring(3)------控制反转(IOC)/依赖注入(DI)
  • 原文地址:https://www.cnblogs.com/rstz/p/14391081.html
Copyright © 2020-2023  润新知