1.	
[问题描述]求一棵树的深度与宽度。共15分(2+2+3+2+2+2+2=15分)
[算法说明]树可用数组tree:array[1..n,1..5]of integer;
其中:tree[I,1]表示结点号;tree[I,2]——tree[I,5]所属结点
如上图可表示为:
	1	2	3	4	0
	2	5	6	7	0
	3	8	0	0	0
	4	9	10	0	0
	5	0	0	0	0
	6	0	0	0	0
	7	11	12	0	0
	8	0	0	0	0
	9	0	0	0	0
	10	0	0	0	0
	11	0	0	0	0
	12	13	0	0 	0
	13	0	0	0	0
在求解的过程中,用到数组G:ARRAY[1..N,1..7]OF INTEGER;
其中:G[I,1]表示父结点,G[I,2]表示层次,
G[I,3]表示本结点号,G[I,4]——G[I,7]表示子女结点;
同时,设2个指针SP1(取数指针),SP2(存数指针)
program exGp3;
const n=13;
var i,j,k,sp1,sp2,n1,n2,jmax,p:integer;
 tree:array[1..n,1..5]of integer;
 g:array[1..n,1..7]of integer;
begin
 for i:=1 to n do 
  begin
 tree[i,1]:=i;
for j:=2 to 5 do read (tree[i,j]);readln;
  end;
 sp1:=1;sp2:=1;g[1,1]:=0;g[1,2]:=1;g[1,3]:=1;
 for i:=4 to 7 do g[1,i]:=tree[1,i-2];
 while sp1<=sp2 do
 begin
p:=g[sp1,2];n2:=g[sp1,3]; p:=p+1 ;j:=4;
while  g[sp1,j]<>0 do
begin
n1:=g[sp1,j];j:=j+1; sp2:=sp2+1 ;
g[sp2,1]:=n2;g[sp2,2]:=p;g[sp2,3]:=n1;
for i:=1 to 4 do g[sp2,i+3]:=tree[n1,i+1];
end;
  sp1:=sp1+1 ;
  end;
  writeln('maxd=',g[sp2,2]); j:=1;k:=g[1,2];jmax:=0;
  for i:=2 to sp2 do
  if k=g[i,2] then j:=j+1
 else begin
 if j>jmax then jmax:=j;
 j:=1  ;k:=g[I,2];
 end;
if j>jmax then jmax:=j;
writeln('max1=',jmax);
end.
			
				
							  
							 
				
			
		 	
			
		
			
							 
				2.	[问题描述] 用生成法求出1,2,…,r的全排列(r<=8)(15分)(每个点3分)
[算法过程] 用数组:a:array[1..r]of integer ;表示排列;
初始化时,a[I]:=1(I=1,2,….f)
设中间的某一个排列为a[1],a[2],…a[r]
则求出下一个排列的算法为:
(1)	 从后面向前找,直到找到一个顺序为止
(设下标为j-1,则a[j-1]<a[j]
(2)	 从a[j]- a[r]中,找出一个a[k]比a[j-1]大的最小元素
(3)	 将a[j-1]与a[K]交换
(4)	 将a[j],a[j+1]……a[r]由小到大排序。 
  program exGp4;
 const r=7;
  var
  n,i,s,k,j,i1,t:intger;
  a  :array[1..r]of integer;
procedure print1;
  var 
 ik:integer;
  begin
 for ik:=1 to r do write(a[ik]:8);writeln;
  end
 begin
 for i:=1 to r do a[i]:=i  ;
 print1;
 s:=1;
 for i:=2 to r do s:=s*i;
 s:=s-1;
 for i:= 1 to s do 
begin 
j:=r;
while a[j-1]>a[j] do j:=j-1;
k:=j;
 for i1:=j+1 to r do 
 if (a[i1]>a[j-1]) and (a[i1]<a[k]) then k:=i1;
 t:=a[j-1];a[j-1]:=a[k];a[k]:=t;
 for i1:=j to r-1 do
for k:=i1+1 to r do
if  a[i1]>a[k]  then
 begin
t:=a[i1];a[i1]:=a[k];a[k]:=t;
 end;
 print1;
     end;
  end.