哈密尔顿环(图论算法)

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


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


程序:
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

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

你可能感兴趣的:(图论算法)