POJ2230 Watchcow——欧拉回路——Pku2230

复习一下欧拉回路的求法。

伪代码如下:

Void Eular(int p);

{

	for 从p出发的每条边

		{

			如果这条边没有被访问过

				{

					边的访问标记置为 true

					Eular(这条边上另外一个点);

					将这条边压入栈中;

				}

		}

}

倒序访问栈中每一条边就是答案。
 
CODE
Program POJ2230;//By_Poetshy

Const 

	maxn=10000;

	maxm=50000;

Var 

	i,j,k,m,n,p,q					:Longint;

	pre,other,last					:Array[1..maxm*2]of Longint;

	v								:Array[1..maxm*2]of Boolean;

	ans								:Array[0..maxm*3]of Longint;

	

Procedure Eular(p:Longint);

var j,k:Longint;

begin

	j:=last[p];

	while j<>0 do 

		begin

			if not v[j] then 

				begin

					v[j]:=true;

					k:=other[j];

					Eular(k);

					inc(ans[0]);

					ans[ans[0]]:=j;

				end;

			j:=pre[j];

		end;

end;

	

BEGIN

	readln(n,m);

	for i:=1 to m do

		begin

			readln(p,q);

			inc(k);pre[k]:=last[p];last[p]:=k;other[k]:=q;

			inc(k);pre[k]:=last[q];last[q]:=k;other[k]:=p;

		end;

	fillchar(v,sizeof(v),0);

	Eular(1);

	writeln(1);

	while ans[0]<>0 do 

		begin

			writeln(other[ans[ans[0]]]);

			dec(ans[0]);

		end;

END.

你可能感兴趣的:(poj)