好吧找到了;就当提供程序吧。。。
program myone;
type stack=record
d:array[1..32]of integer;
t:integer;
end;
var s:stack;x,y,t,n:integer;
g,v:array[1..100,1..100]of boolean;
procedure print;
var i:integer;
begin
for i:=1 to s.t-1 do write(s.d[i],*->*);
writeln(s.d[s.t]);
end;
function examine:boolean;
var i,j:integer;
begin
examine:=true;
for i:=1 to n do
for j:=1 to n do
if v[i,j]=g[i,j] then
begin examine:=false;exit; end;
end;
procedure dfs(i:integer);
var j:integer;
begin
if examine then
begin print;exit;end;
for j:=1 to n do
if (g[i,j])and(v[i,j]) then
begin
v[i,j]:=false;v[j,i]:=false;
inc(s.t);s.d[s.t]:=j;
dfs(j);v[i,j]:=true;v[j,i]:=true;
dec(s.t);
end;
end;
begin
assign(input,*myone.in*);reset(input);
assign(output,*myone.out*);rewrite(output);
fillchar(g,sizeof(g),false);
fillchar(v,sizeof(v),true);
read(n);
for x:=1 to n do for y:=1 to n do
begin
read(t);
if t>0 then g[x,y]:=true;
end;
close(input);
s.t:=1;
s.d[1]:=5;
dfs(5);
close(output);
end.
program myone;
type stack=record
d:array[1..32]of integer;
t:integer;
end;
var s:stack;x,y,t,n:integer;
g,v:array[1..100,1..100]of boolean;
procedure print;
var i:integer;
begin
for i:=1 to s.t-1 do write(s.d[i],*->*);
writeln(s.d[s.t]);
end;
function examine:boolean;
var i,j:integer;
begin
examine:=true;
for i:=1 to n do
for j:=1 to n do
if v[i,j]=g[i,j] then
begin examine:=false;exit; end;
end;
procedure dfs(i:integer);
var j:integer;
begin
if examine then
begin print;exit;end;
for j:=1 to n do
if (g[i,j])and(v[i,j]) then
begin
v[i,j]:=false;v[j,i]:=false;
inc(s.t);s.d[s.t]:=j;
dfs(j);v[i,j]:=true;v[j,i]:=true;
dec(s.t);
end;
end;
begin
assign(input,*myone.in*);reset(input);
assign(output,*myone.out*);rewrite(output);
fillchar(g,sizeof(g),false);
fillchar(v,sizeof(v),true);
read(n);
for x:=1 to n do for y:=1 to n do
begin
read(t);
if t>0 then g[x,y]:=true;
end;
close(input);
s.t:=1;
s.d[1]:=5;
dfs(5);
close(output);
end.