从图G中找出一条包含所有顶点的简单路径(一笔画出、哈密顿路径)

该博客介绍了如何使用深度优先遍历算法在图中找到一条包含所有顶点的简单路径,即哈密顿路径。文章通过C++代码实现,首先选定一个起点,进行DFS搜索。若遍历结束后仍未找到路径,则尝试更换起点再次搜索。如果所有点都尝试过仍无结果,则输出Fail。
摘要由CSDN通过智能技术生成

算法思想: 选一个点作为起始点,在深度优先遍历的过程中寻找路径,在遍历过程中,在回溯前判断是否已访问所有顶点,如果没有则取消本顶点的访问。如果整个遍历结束都没有找到路径,则换一个起始点重新深度优先遍历。所有点都试过后,如果未找到路径则输出Fail。

代码:

#include <iostream>
#include <vector>
using namespace std;
#define N 10
int visited[N]={0};
int Arc[N][N]={0};
vector<int> path;
void DFS(int a);
void HaMiDun()
{
 for(int i=0;i!=N;++i)
 {
  if(path.empty())
   DFS(i);
 }
 if(path.empty())
  cout<<"Fail.\n";
 else
 {
  for(int i=0;i!=N;++i)
   cout<<path[i]<<" ";
 }
}
void DFS(int a)
{
 path.push_back(a);
 visited[a]=1;
 for(int i=0;i!=N;++i)
  if(visited[i]==0&&Arc[a][i]==1)
   DFS(i);
 if(pat

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值