哈密尔顿环(图论算法)

本文深入探讨了图论中的哈密尔顿环问题,详细解析了相关算法,包括如何寻找一个图中是否存在哈密尔顿环及其在路径规划中的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目: 欧拉回路是指不重复地走过所有路径的回路,而哈密尔顿环是指不重复地走过所有的点,并且最后还能回到起点的回路。


解题思路: 先用邻接表储存数据,然后循环,当某个点不在之前曾经访问过的图里,就开始深度优先搜索,记录答案,然后输出即可。


程序:
var
  g:array[1..100,1..100]of longint;
  start,i,long,x,y,k,n,m:longint;
  visited,v1:array[1..100]of boolean;
  ans,num:array[1..100]of longint;

procedure print;
  var
    i:longint;
  begin
    for i:=1 to long do
      write(' ',ans[i]);
    writeln;
end;

procedure dfs(i:longint);
  var
    j:longint;
  begin
    visited[i]:=true;
    v1[i]:=true;
    inc(long);
    ans[long]:=i;
    if (long>1) and (ans[long]=ans[1]) then print;
    for j:=1 to num[i] do
      if (not visited[g[i,j]]) then dfs(g[i,j]);
    dec(long);
    visited[i]:=false;
end;

begin
  readln(n,m);
  for i:=1 to m do
    begin
      readln(x,y);
      inc(num[x]);
      inc(num[y]);
      g[x,num[x]]:=y;
      g[y,num[y]]:=x;
    end;
  fillchar(visited,sizeof(visited),false);
  fillchar(v1,sizeof(v1),false);
  for k:=1 to n do
    if (not v1[x]) then begin long:=0; dfs(x); end;
end.


版权属于: Chris

原文地址: http://blog.sina.com.cn/s/blog_83ac6af80102v0u2.html

转载时必须以链接形式注明原始出处及本声明。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值