�����㷨pascal_�ĵ����Ϲ�����
��ǰλ�ã���ҳ >> ѧ�ƾ��� >> �����㷨pascal
�����㷨pascal
��Ϣѧ������ѵ���������㷨����һ��Ԥ��֪ʶ��������ͼ����������ȱ���DFS���͹�����ȱ���BFS������������ȱ���DFS���ķ���ʵ�������������������Ӹ��������������������������� �����ϲ����ڼ�������ʱ���˻ص��ϲ��㣬ѡ������һ����֦������� ���൱��ͼ�� DFS�� ���Ĺ�����ȱ���BFS���ķ���ʵ����
������������������Ӹ�������������˸���֮����ʸ��� �������ӽ�㣬Ȼ��ֱ����Щ�ӽ����������������ȵ�˳������������ ���൱��ͼ�� BFS�� �� ���磺����������� DFS �� BFS ����˳�� DFS ����˳�� V0-V1-V4-V5-V6-V2-V7-V8-V3-V9-V10-V11BFS ����˳�� V0-V1-V2-V3-V4-V5-V6-V7-V8-V9-V10-V11����֪��ͼ�����ֱ�����������̶���һ������������ԡ�ͼ���ı����ͳһ���������ı��� ���ǻ�֪����ͼ�� DFS Ҫ�õ���ջ�� ���ݹ飩 ��ͼ�� BFS Ҫ�õ������С� ����Щ��������ѧϰ�����㷨��Ҫ�� ����֪ʶ�� �ӽ�㡮A���������ֱ��� DFS ����˳�� BFS ����˳�����������㷨���������㷨�����ü����ĸ���������Ŀ�ĵ����һ�������ռ�Ĳ��ֻ����еĿ�������� �Ӷ��������� ���һ�ַ������������ʵ�����Ǹ�ݳ�ʼ��������չ������һ�á����������Ѱ�ҷ��Ŀ��״̬�Ľڵ� �Ĺ�̡����е������㷨�������յ��㷨ʵ���������������Ի��ֳ��������֩������ƽṹ����չ���ķ�ʽ��1��Ϣѧ������ѵ�����Ͳ���ϵͳ����չ��㣩 �������е��㷨���Ż��͸Ľ���Ҫ����ͨ���޸�����ƽṹ����ɵġ� ���õ����������л��ݷ�����������������͹�����������������ھ�󲿷ֵ���Ϣѧ�����鼮�У��� �����㷨�������������������һ���Ϊ������������㷨�� �� ������������㷨��DFS�� �����ǰ�������ȵĲ��ԣ�����Լ��������������Ľ�����������������ͼ�� ��ʾ�ģ�����ȷ�ظ��ͼ�н�㡢�ߵĹ�ϵ����ͱ����ͼ�����ı������⣩ �� ������������㷨��BFS�� �����ǰ����ǰ�������ȵĲ��ԣ�����Լ��������������ġ�������� ��������� �����ͼ����ʾ�ģ�����ȷ�ظ��ͼ�н�㡢�ߵĹ�ϵ����ͱ����ͼ�����ı������⣩ �� ��������������Կ����������㷨�еġ���������Ƿǳ��ؼ�ģ�������������������㷨��ʱ���Ժ��� ����������������ǵ�˼·������Ż��㷨�������㣬��������������ι�������ġ�������� ��������һ���⣩ ������������㷨 �����õݹ��̻���ģ��ݹ���ʵ�֡�������ʵ�ֵ����ֿ�ܣ�Program ������������㷨����; Const ?; Type ?; Var ?; Procedure try(depth:longint,?); Var i:longint; Begin If depth>Ŀ����� then begin ������� ;exit end; For i:=depth ��ȿ��ܾ��߷�Χ do begin If ���� i ���չ������ then begin ��¼���� i ; Try(depth+1); ɾ����� i ; End; End; End; Begin2��Ϣѧ������ѵ���������������ݲ���ʼ���� Try(1); ������ֹ���� End.3��Ϣѧ������ѵ����4��Ϣѧ������ѵ����5��Ϣѧ������ѵ����6��Ϣѧ������ѵ����7��Ϣѧ������ѵ������ 1�����ӷ��ܼ����⣺�� 2 �����ӣ������ֱ�Ϊ x ����y ������һ��ʵ��ƿ��װ�� x+y ����Ļ�ѧ�ܼ���ʵ������Ҫ����ȷ�ط�Ϊ���ݣ�û�����ߣ�ֻ���������ӣ������һ���������ҳ�һ�ֶԷַ��������� �ܶԷ֣������NO!�� �� ���������� x=5��y=3����ƿ��Ϊ A�������ǽ�ÿ�������е��ܼ���������Ϊ״̬��㣬��һ����������һ�� �����е��ܼ�����ʾһ��״̬�ı仯������ǽ��ġ�����ϵͳ�� ������֪����ÿ��״̬������չ�� 6 ����֦�� �㣬���� �� A �� X �㵹�ܼ�:A->X �� A �� Y �㵹�ܼ�:A->Y �� X �� A �㵹�ܼ�:X->A �� X �� Y �㵹�ܼ�:X->Y �� Y �� A �㵹�ܼ�:Y->A �� Y �� X �㵹�ܼ�:Y->X �����ʼ���(8��0��0)������չ���Ľ��Ϊ�� ��3��5��0����5��0��3�� �� �������֣�X->A��X->Y��Y->A��Y->X ���޷���չ��������˼����� ��������˼·�����ǿ��Թ������������£� �����ʹ�Ľ�㲻Ӧ����չ�����ҲҪ�������� ����ҿ��԰�������˼·�������Ľ���������ܷ��ҵ����ܵĽ⡣ �������Ҫ���ҵ����п��ܵķַ������ǿ��Բ���������ȵĲ�������������������Ҫ�����ķַ����� �Բ��ù�����ȵĲ������������������������������㷨������������㷨������ѧϰ��������������˼·��һ��ģ�������ġ���������У�����������ȵĲ� �ԣ��Ӹ���������������������ÿ����㣬ֱ���ҵ�����Ľ�Ϊֹ�� ��������㷨�������������������һ���ʱ���������жϸý���Ƿ�������ġ�Լ�������� ����ʽ�Ļ� ��ʽ�� �����϶�����ϣ��������Ըý��Ϊ�����������������������ϲ�����ݡ����򣬽���������� ����������ȵĲ��Խ��������� ���������� 1 ���ܼ����⣬�����ó��������������������ɽ�����Ĺ������Ϊ��8��Ϣѧ������ѵ����ע�⣺��¼���״̬����ݽṹ�������£� Const Maxd=100; Type node=Record a,x,y:Integer; End; Var f:Array[1..Maxd] of node; �洢����������Ѿ���չ���Ľ�㣨ջ�� �� ÿ������״̬��a��ƿ������x��x ����y��y �� �������������������չ����� Procedure dfs(dep:Integer); Var c:Integer; Begin If (f[dep].a=(x+y)div 2) and (f[dep].x=(x+y)div 2) then Begin outans(dep); exit End; For c:=1 to 6 do If expandok(f[dep].a,f[dep].x,f[dep].y,dep,c) then dfs(dep+1) End; ÿ��������չ�� 6 ���ӽ�� ���� dep ��ĵ� c ���ӽ������չ������ չ�����Ըý��Ϊ�µĴ���չ��㣬������ չ�� ����Ѿ��ҵ�Ŀ���㣬�����һ���� ��չ���(f[dep].a,f[de].x,f[dep].y)���ͣ�����Ĺ����һ�����͵���������������򣬺��� expandok(f[dep].a,f[dep].x,f[dep].y,dep,c) ����չ����Լ�����������������ⲻ�ѷ�����Լ������Ϊ�� 1��ĳ���������ܼ���Ϊ 0�����������������㵹Һ�壻 2��ĳ�������Ѿ�װ����������������㵹Һ�壻 3��ǰ���Ѿ����ڵĽ�㲻�ܼ�����չ�����ԣ�Լ���������� expandok(sa,sx,sy,d,c:Integer):Boolean;���£�Function expandok(sa,sx,sy,d,c:Integer):Boolean;����>�жϵ� d ��ĵ� c ����֧����ܷ���չ Var i,tmp:Integer; Begin expandok:=True; case c of 1: If (sa=0)or(sx=x) then Begin expandok:=false;exit End; A->X ʱ��� A Ϊ 0 �� X ����������չ 2: If (sa=0)or(sy=y) then Begin expandok:=false;exit End; A->y ʱ��� A Ϊ 0 �� y ����������չ 3: If (sx=0) then Begin expandok:=false;exit End; X->A ʱ��� X Ϊ 0��������չ 4: If (sx=0)or(sy=y) then Begin expandok:=false;exit End; X->Y ʱ��� X Ϊ 0 �� Y ����������չ 5: If (sy=0) then Begin expandok:=false;exit End; Y->A ʱ��� Y Ϊ 0��������չ 6: If (sy=0)or(sx=x) then Begin expandok:=false;exit End; Y->X ʱ��� Y Ϊ 0 �� X ����������չ9��Ϣѧ������ѵ����End; case c of 1:Begin tmp:=sa+sx; If tmp>x then sx:=x else sx:=tmp; sa:=tmp-sx End; 2:Begin tmp:=sa+sy; If tmp>y then sy:=y else sy:=tmp; sa:=tmp-sy End; 3:Begin sa:=sa+sx; sx:=0 End; 4:Begin tmp:=sx+sy; If tmp>y then sy:=y else sy:=tmp; sx:=tmp-sy End; 5:Begin sa:=sa+sy; sy:=0 End; 6:Begin tmp:=sx+sy; If tmp>x then sx:=x else sx:=tmp; sy:=tmp-sx End; End; For i:=1 to d do If (sa=f[i].a) and (sx=f[i].x) and (sy=f[i].y) then Begin expandok:=False; exit End; f[d+1].a:=sa;f[d+1].x:=sx; f[d+1].y:=sy; End; ����µĽ�� ���ҽ�㣨sa,sx,sy���Ƿ��ѷ��ʹ� Y �� X �㵹�� Y �� X ��ʵ��Һ������ Y �� A �㵹�� Y �� A ��ʵ��Һ������ X �� Y �㵹�� X �� Y ��ʵ��Һ������ X �� A �㵹�� X �� A ��ʵ��Һ������ A �� Y �㵹�� A �� Y ��ʵ��Һ������ A �� X �㵹�� A �� X ��ʵ��Һ��������� outans(dep);���һ���⣺ Var i:Integer; Begin ans:=ans+1; write(ans,':'); For i:=1 to d-1 do ·����Ϊ d write('(',f[i].a,',',f[i].x,',',f[i].y,')','->');�������·���ϵ����н�� writeln(f[d].a,',',f[d].x,',',f[d].y); writeln; End; ����ĳ�����ͬѧ���Լ��������� ������ķ��������ǿ��Թ�������������������Ĳ��裺 1�� ȷ������Ľ�ռ䣨��ݹ�ģ�������������֧�� ��������С��Χ�Ľ������ 2�� ����Լ������������ھ���Ŀ������������ 3�� д��������������ĺ��ĳ���һ����ĳ���ĵݹ���������£� ���Ŀ����10��Ϣѧ������ѵ����procedure DFS(dep:integer); { i �ǵݹ���ȣ�} var begin if �ҵ��� then begin ������; exit End; { n ����ȿ��ƣ���������ĵĸ߶ȣ�} for j:=�½� to �Ͻ� do begin x[i]:=h[j]; if ����{�����֦�����Լ������} then begin ��ֵ�� DFS(dep+1); {������������} �ָ�ȫ�ֱ�������ݣ� end; end; end; 4�� ���Գ��򣨳�ַ����߽������� �� ���������㷨�ĵ��Ż������ǳ����ڽ�����Ļ��������¹����� 1�� ��ַ��������Լ�������� 2�� ���������ġ��Ͻ硱�͡��½硱 ��ʹ��֦�������٣� 3�� ����ǰԤ����һЩ��ݣ��ﵽ��������Ŀ�ģ� 4�� ��ǿ��֦���ž���������ˮƽ�������ˣ� �������������������ӣ�11��Ϣѧ������ѵ������ 2������оٳ� 1��2��?��n ��ȫ���С� ����оٳ� 1��2��?��n ��ȫ���С� ������������������㷢�ı����ǣ�����������ȵĲ�����������Ľ������ ���Ҫʹ���������⣬ Ӧ���Ȼ�������С��Χ�Ľ���������嵽���⣬���Ǽ��� n=3 ʱ������ͼ��λ�� 1 ���Է������� 1��2��3��λ�� 2 ���Է������� 1��2��3��λ �� 3 ���Է������� 1��2��3�����ǵ�λ�� 1 �������� 1 ��λ�� 2 ��λ�� 3 �������ڷ� 1����˻�����Լ�������ǣ���λ�õ����ֲ�����ͬ�����ǻ����������ʱ������һ����һ���ս�㣬��������ĵ� 1��2��3 ���ֱ��Ӧλ�� 1��λ�� 2��λ�� 3���á��w����ʾ�ķ�֧��ʾ�ý�㲻����Լ�����������ܱ���չ�����������õݹ��������� ���������������������� Pascal ��� procedure DFS(i:integer); Var c:integer; Begin If i>3 then Begin ���һ������; exit End; For c:=1 to 3 do If used(c)=false Then Begin used[c]:=true; a[i]:=c; DFS(i+1); used[c]:=false; End; End; ������� ������ i ���㣨��� i ��λ�÷������������һ��·���������һ�ֽ⣻ ÿһ�������Էֽ�� 3 ���ӽ�㣻 �������ɵ� i ��ĵ� c ����㣻 ���� c ���ã���������洢�� ��չ�� i ��ĵ� c ����㣨��� i+1 ��λ�÷��� ���ϻ��ݣ����ָ������ͬѧ�Լ�������������ƣ����ڻ����ϵ���ͨ��12��Ϣѧ������ѵ������ 3������ �Ѵ� 1 �� n �� n ����ڳ�һ������Ҫ�����ڵ�������ĺ���һ������ ����������� �ǳ����ԣ�����һ����������Ŀ����λ�� 1 ��ʼ��ÿ����λ�� n ������������֣�ֻҪ��� ȥ����Ϸ������㷨��ơ����� 1�����������n=3�� ������ 2��ȷ��Լ�������ͼ�֦����Լ�����������ù�����ֲ������ò����� a[i]��Ҫ������� c ����� a[i-1]�������� (used[c]=false) If used[i]=false then ���� i δʹ�ã� If used[i]=True then ���� i ��ʹ�ã� ok(i-1,c)�������������� used[i]����ʾ���� i �Ƿ��Ѿ�ʹ�ù����� Ok(i,j)���ж� a[i-1]+a[i]�Ƿ�������(���� j �Ǵ����� a[I]����)��Function ok(i,j:Integer):boolean; Var c ,s:integer; P:boolean; Begin If i=0 then begin ok:=true; exit End; P:=true; s:=a[i]+j; For c:=2 to truncc(sqrt(s)) do If s mod c=0 then Begin p:=false; break End; If i=n-1 then Begin S:=a[1]+j; For c:=2 to truncc(sqrt(s)) do If s mod c=0 then Begin p:=false; break End; End; Ok:=p; End; �����ǻ�����˵� j �ǵ� n ����ʱ��Ӧ�� a[1]�ĺ�Ҳ���������� 3��д������������������һ�� ��13��Ϣѧ������ѵ����Procedure try(i:integer);{���Ÿ� a[i]����} Var c:integer; Begin If i>n then Begin outans; exit End; {����ҵ�һ����������} For c:=1 to n do {a[i]�п����������� 1��2��3��?��n} If (used[c]=false) and ok(i-1,c) then {�����Լ������������} Begin a[i]:=c; used[c]:=true; {�� a[i]���������� c�����ұ�ʾ���� c ���ù�} try(i+1); {���Ÿ� a[i+1]����} a[i]:=0;used[c]:=False {���ݵ��ϲ㣬���� a[i]�� 0������ c ����} End; End;��ͬѧ���Լ����ó�������14��Ϣѧ������ѵ������ 4����Ļ��� ������ n �ֳ� k �ݣ���ÿ�ݲ���Ϊ�գ��������ݲ�����ͬ(������˳��)�� ���磺n=7��k=3���������ַַ�����Ϊ����ͬ�ġ� 1��1��5; 1��5��1; 5��1��1; ���ж����ֲ�ͬ�ķַ��� ���룺n��k (6<n<=200��2<=k<=6) �����һ�������ͬ�ķַ��� ���� ���룺 7 3 �����4 {���ַַ�Ϊ��1��1��5;1��2��4;1��3��3;2��2��3;} �㷨��ƣ� ���Ǹ��������⣬�������Ŀһ�㲻����������Ϊ����������������������������ܵõ����մ𰸣�ʱ�� ���Ӷȸߣ������ڱ������ݹ�ģ�Ƚ�С�������ƺ���չ���ġ��Ͻ硱�͡��½硱 ��Ҳ���ܹ��ܿ�ó���ġ� 1����������Ľ���� n=3��m=2 ʱ��2��Լ�������� �����ڷֽ�����˳����������趨�ֽ������ε���������������չ���ʱ�ġ��½硱Ӧ�ǲ�С�ڴ��� չ����ֵ�� �ڼ������ǽ� n �Ѿ��ֽ���� a[1]+a[2]+?+a[i]���� a[I+1]�����ֵΪ�� �� k= a[1]+a[2]+?+a[i]���� a[I+1]<=(n-k) div (m-i) ������չ���ʱ�ġ��Ͻ硱��(n-k) div (m-i)��ͬѧ�ǻ��� n=7 m=3 ʱ������Լ�������Ľ������3������������̣� Procedure solve(k,dep:Integer); {k=n-a[1]+a[2]+?+a[dep-1];dep ��ʾҪ�õ��� dep ���ֽ��� Var c:Integer; Begin If (dep=m) and (k>=a[dep-1]) Then Begin Inc(ans); exit; End; For c:=a[dep-1] to k div (m-dep) do Begin a[dep]:=c; solve(k-c,dep+1) End; End;15��Ϣѧ������ѵ������ 5 ���ʵĻ��֡�16��Ϣѧ������ѵ����17��Ϣѧ������ѵ����18��Ϣѧ������ѵ����19��Ϣѧ������ѵ������ 6�����ʽ��� ���ʽ�����һ�������Ǿ�����ĳ�����������Ƶ���Ϸ������������֪һ�鵥�ʣ��Ҹ�һ����ͷ����ĸ�� Ҫ����������ĸ��ͷ����ġ��� ��ÿ�����ʶ�����ڡ����г������Σ� ����������������ʱ�����غϲ��� ��Ϊһ���֣����� beast �� astonish�����ӳ�һ�������Ϊ beastonish���������ڵ������ֲ��ܴ��ڰ��ϵ�� ���� at �� atide �䲻�������� ����ĵ�һ��Ϊһ������������ n (n<=20)��ʾ���������� n ��ÿ����һ�����ʣ���������һ��Ϊһ�� �����ַ��ʾ����ͷ����ĸ������Լٶ��Դ���ĸ��ͷ�ġ���һ������. ֻ������Դ���ĸ��ͷ����ġ���ĳ��� �� �� �� ���� 5 at touch cheat choose tact a ��� 23 �����ɵġ���Ϊ atoucheatactactouchoose��20��Ϣѧ������ѵ�����㷨������ 1�� ����һ�����͵�������Ŀ���򵥽�������Ժ����׻�����(�൱�����У���ÿ�����ʿ�������) ���ǽ������е� 5 �����ʷֱ���Ϊ 1�� 3�� 2�� 4��5��������� Լ�������� �١���ǰ�����ӵ����Ƿ��ܹ���ӣ� �ڡ�ÿ���������ʹ������2������֪���������չ����Լ������֮һ�ǣ���ǰ�����ӵ����Ƿ��ܹ���ӣ� ������һ����ά�� link[I,j]������ I ��������� j �������ܹ���ӣ��� link[I,j]�������ӵĳ��ȣ����� Ϊ-1�� ��������ɵĶ�ά��Ϊ�����=Length(s[1])+link[1,2]+link[2,3]+link[3,5]+link[5,5]+link[5,2]+link[2,3] = 2 + 4 + 3 + 3 + 3 + 4 + 4 =2321��Ϣѧ������ѵ������� link[0..n��1..n]�ĳ��� Function len(i,j:Integer):Integer; �� I ��������� j ��������ӵĳ��ȡ� Var L1,L2,L:Integer; s1,s2:string; Begin L1:=Length(s[i]); L2:=Length(s[j]); len:=-1; L:=1; While (L<l1) and (L<l2) do Begin s1:=copy(s[i],L1-l+1,l); s2:=copy(s[j],1,l); If s1=s2 then Begin len:=length(s[j])-l; exit End; L:=L+1; end; End; Procedure linktable; Var i,j:Integer; Begin For i:=1 to n do ��ɶ�ά�� For j:=1 to n do link[i,j]:=len(i,j) End;Լ������֮���ǣ�ÿ���������ʹ�� 2 �Σ������������һ�� used[1..Maxn] of 0..2������¼ÿ�����ʵ�ʹ�� ����� 4��д�㷨���ĳ��� Procedure solove(i,ans:Integer); I Ϊ������ȣ�ans Ϊ��ǰ��� Var c,b:Integer; Begin If best<ans then best:=ans; For c:=1 to n do ÿ����������չ�� n ����֧ For b:=1 to 2 do ÿ�����ʿ���ʹ������ If (used[c]>0) and (link[i,c]>0) Then Begin used[c]:=used[c]-1; ans:=ans+link[i,c]; solove(c,ans); ��չ��ǰ��� used[c]:=used[c]+1; ans:=ans-link[i,c]; �ָ���� End; End;��������ã� For i:=1 to n do If c=s[i][1] then solove(i,length(s[i]));22��Ϣѧ������ѵ������ 6����ʳ�� ��ν��ʳ�㣬����ԭ�ȵ���ʽ����һ���ֱ����ӿе��ˣ���Ҫ���Ǹ��ʣ�µ��������ж����е�����ĸ���� ��һ���򵥵����ӣ� 43#98650#45 + 8468#6633 44445506978 ����#�Ŵ�?���ӿе������֡������ʽ�����Ǻ������жϣ���һ�е��������ֱַ��� 5 �� 3���ڶ��е� ������ 5�� ���ڣ����Ƕ��������������ƣ� ���ȣ�����ֻ���Ǽӷ��ĳ�ʳ�㡣����ļӷ��� N ���Ƽӷ�����ʽ��������� N λ��������ǰ���� 0�� ��Σ����Ӱ����е���й��ˣ�����ֻ֪����Щ��������ͬ�ġ����ǽ���ͬ����������ͬ����ĸ��ʾ���� ͬ�������ò�ͬ����ĸ��ʾ����������ʽ�� N ���Ƶģ����Ǿ�ȡӢ����ĸ���е�ǰ N ����д��ĸ����ʾ��� ��ʽ�е� 0 �� N-1 �� N ����ͬ������ �������� N ����ĸ����һ��˳��ش�� 0 �� N-1�� ������ݱ�֤ N ����ĸ �� �ֱ����ٳ���һ�Ρ� BADC + CBDA DCCC �������ʽ��һ�� 4 ���Ƶ���ʽ������Ȼ������ֻҪ�� ABCD �ֱ��� 0123������������ʽ�ӳ����ˡ� ��������ǣ����ڸ�� N ���Ƽӷ���ʽ����� N ����ͬ����ĸ�ֱ�������֣�ʹ�øüӷ���ʽ���������� ��ݱ�֤���ҽ���һ��⡣ �������ļ��� �����ļ� alpha.in �� 4 �С���һ����һ�������� N��N <= 26�� ������� 3 ��ÿ����һ���ɴ�д��ĸ��ɵ� �ַ��ֱ������������Լ��͡��� 3 ���ַ��������˶�û�пո񣬴Ӹ�λ����λ������ǡ���� N λ�� ������ļ��� ����ļ� alpha.out ��һ�С�����һ���У�Ӧ����Ψһ������⡣���������ʾ�ģ���� N �����֣��� ���ʾ A��B��C������������֣����ڵ�����������һ���ո�����������ж���Ŀո� ���������롿 5 ABCED BDACE EBBAA ����������� 10342 ����ݹ�ģ�� ���� 30%����ݣ���֤�� N <= 10�� ���� 50%����ݣ���֤�� N <= 15�� ����ȫ������ݣ���֤�� N <= 26�� �㷨������ 1�� ��������ʵ������� 0��1��2��?��n-1 ��һ�����У�ʹ֮������������������������㷨�� ��ݶ��壺 Const Maxn=26; Var used:Array[0..Maxn-1] of integer; ans:Array['A'..'Z'] of Integer; a,b,c:string[26]; n:Integer;23��Ϣѧ������ѵ���������������� Procedure try(dep:Integer); �����г��� Var k:Integer; Begin If dep>n-1 Then If check Then Begin outans; halt End; For k:=0 to n-1 do Begin If used[k]=0 then Begin used[k]:=1;ans[chr(dep+65)]:=k; try(dep+1); used[k]:=0; End; End; End; ���� check �ж��Ƿ��ǽ⣬�������£� Function check:Boolean; Var g,m,k:Integer; cc:Array[1..Maxn] Of Integer; Begin g:=0; check:=True; For k:=n downto 1 do Begin m:=ans[a[k]]+ans[b[k]]+g; �߾��ȼӷ� cc[k]:=m mod n; g:=m div n; End; If g>0 then Begin check:=False; exit End; ���͵�λ����� n�����ǽ� For k:=1 to n do If ans[c[k]]<>cc[k] Then Begin check:=False; exit End; End;2��������Ĺ�ģ�ϴ�����ĳ�����ͨ�� 3 ����ݾͷǳ����?���������˳��͸�Ч�ʵļ�֦�ͳ�Ϊ�ؼ� ������˳�����ǿ��Ը�ݼӷ�ʽ���г��ֵ���ĸ˳�򣨴��������������� ���������а������������������˳��Ϊ��A��B��C��D��E �����Ա仯��������˳���ɣ�D��E��A��C��B ��һ��ǳ���Ҫ�� �� �ڼ�֦������֪���ӷ�������ͬλ������� a+b=c����ô a��b��c ������������ ����֪ a��b��c ��ֵ����Ӧ���㣺(c=(a+b) mod n ) or (c=(a+b+1) mod n) ����֪ a��b ��ֵ���� c ֵӦ���㣺(c=(a+b) mod n ) or (c=(a+b+1) mod n) ����֪ b��c ��ֵ���� a ֵӦ���㣺(a=(c-b+n) mod n) or (a=(c-b+n+1) mod n) ����֪ a��c ��ֵ���� b ֵӦ���㣺 ��b=(c-a+n) mod n�� or (b=(c-a+n+1) mod n) ���ĸ������ͳ���ǿ�����ļ�֦���� 3����֦����24��Ϣѧ������ѵ����������ķ�������֦�������£� Function check1(i:Integer):Boolean; Var k,l,pp1,pp2:Integer; Begin check1:=True; For k:=n downto 1 do if (ans[a[k]]>=0) and (ans[b[k]]>=0) and (ans[c[k]]>=0) then Begin pp1:=(ans[a[k]]+ans[b[k]]) mod n; pp2:=(pp1+1) mod n; If not((ans[c[k]]=pp1)or(ans[c[k]]=pp2)) then Begin check1:=False; exit End; End; For k:=n downto 1 do if (ans[a[k]]>=0) and (ans[b[k]]>=0) and (ans[c[k]]=-1) then Begin pp1:=(ans[a[k]]+ans[b[k]]) mod n; pp2:=(pp1+1) mod n; If (used[pp1]=1) and (used[pp2]=1) then Begin check1:=False; exit End; End; For k:=n downto 1 do if (ans[a[k]]>=0) and (ans[b[k]]=-1) and (ans[c[k]]>=0) then Begin pp1:=(ans[c[k]]-ans[a[k]]+n) mod n; pp2:=ans[c[k]]-ans[a[k]]-1; If pp2<0 then pp2:=pp2+n; If (used[pp1]=1) and (used[pp2]=1) then Begin check1:=False; exit End; End; For k:=n downto 1 do if (ans[a[k]]=-1) and (ans[b[k]]>=0) and (ans[c[k]]>=0) then Begin pp1:=(ans[c[k]]-ans[b[k]]+n) mod n; pp2:=ans[c[k]]-ans[b[k]]-1; If pp2<0 then pp2:=pp2+n; If (used[pp1]=1) and (used[pp2]=1) then Begin check1:=False; exit End; End; End;a+b=ca+b=?a+?=c?+b=c��ͬѧ����������ĳ��򣬲��ڻ�����ͨ��25��Ϣѧ������ѵ�����ġ�������������㷨��������������㷨�������İ������ӳ�ʼ����������չ����һ���㣬���Ŀ�����Ƿ�����Щ�� �̽���У���û�У��ڽ���һ������һ��չ���õ��� 2 ���㣬������Ƿ��Ŀ���㣬��û�м�����չ�� 2 ��??����˼����ȥ��ֱ���ҵ�Ŀ����Ϊֹ�� �����������������֪������չ�����Ľ�㣬��ȻҪ����չ������÷�϶��С��Ƚ��ȳ�������������� ������������㷨�ö������洢����չ�Ľ�㣬������Ҫʹ�á��ݹ顱 �� �������������� 1 �ķ��ܼ����⣬������Ҫ�ҳ����ķַ������ǲ��ù�����������Ĺ���������£� Const Maxd=100; Type node=Record a,x,y��parent:Integer; ÿ������״̬��a��ƿ������x��x ����y��y ����parent:˫�׽�� �������ڵ���End; Var f:Array[1..Maxd] of node; �洢�����Ѿ���չ���Ľ�㡣 �����У� ���������չ����� Procedure bfs; Var h,r,c:Integer; Begin h:=1; r:=1; While (r<Maxn-6) and (h<=r) do Begin For c:=1 to 6 do Begin If expandok(f[h].a,f[h].x,f[h].y,r,c) Then Begin r:=r+1; f[r].parent:=h End; If (f[r].a=(x+y) div 2) and (f[r].x=(x+y) div 2) Then Begin outans(r); halt End; End; h:=h+1; End; If (h>Maxn-6) or (h>r) Then writeln('No answer!'); End; ���ǿ����ֹ�ģ����������������̡� ��֦���� expandok(f[h].a,f[h].x,f[h].y,r,c)��ǰ�������������һ�� ���� outans(r)�õݹ飻��д���£� Procedure outans(r:Integer); Begin If f[r].parent>0 Then outans(f[r].parent); write(f[r].a,',',f[r].x,',',f[r].y,'->'); End; ��ͬѧд��������򣬲��ڻ����ϵ���ͨ��26����������� h:���ף�r:��β��c ÿ�����ķ�֧ö�ٱ� �� ��δ������е��������Ҷ������в�Ϊ�� ʱѭ��������Ĳ��� f[h]������չ�� 6 ���ӽ�� ���� c ����֧��������չ���� ����չ�������β �������չ�����Ľ����Ŀ���㣬����� �� ���� f[h]�����չ��ϣ��� h ����һ�� û���ҵ�����������Ϣѧ������ѵ���������������������ӣ� �� 7����һ�� n*m �������ϣ����λ���� P �㣬����������ֻ���������������� P ���� Q �����̲��� ��n �� m �ɼ������룩 ��������Ҫ�����ٵĲ����ù�������㷨�����ǹ���������������������ŵ㣩 �� ��1���������������ֻ���������������� 4 ��������˽�������ķ�֧�����Ϊ 4������ͼ�� ��ӳ�ʼ��㣨1��1��������2��3�� �ͣ�3��2������λ�ã�������״̬���� ����깹�ɡ����������?��������̡� ��2����ݽṹ�� Const Maxn=1000; ������󳤶� mov:Array[1..4,1..2] of integer=((-2,1),(-1,2),(1,2),(2,1)); �ĸ��ƶ���������仯 Type node=Record x,y,parent:Integer; ���н��״̬ End; Var q:Array[1..Maxn] of node; ���� ��3���㷨�ĺ��ĳ���27��Ϣѧ������ѵ����Procedure bfs; Var h,r,c,x,y:Integer; h:���ס�r ��β find:boolean; Begin h:=1; r:=1; find:=false; While not(find) and (h<=r) do Begin For c:=1 to 4 do Begin x:=q[h].x+mov[c,1]; y:=q[h].y+mov[c,2]; ���������仯 ���û��������� ���β If(x>0) and (y>0) and (x<=n) and (y<=m)Then Begin r:=r+1; q[r].x:=x; q[r].y:=y; q[r].parent:=h End; If (q[r].x=n) and (q[r].y=m) then Begin outans(r); find:=true End; End; h:=h+1; End; End; ����ҵ�Ŀ���㣬����� ÿ��������չ�� 4 ����֧��� ��û�ҵ�Ŀ�����Ҷ��в�Ϊ����ͬѧ����������ĳ��򣬲��ڻ����ϵ���ͨ�� ������������������㷨���������⣬Ȼ��Ƚ������㷨�Ĳ�ͬ�� ���ˣ����Ƕ����ֻ�������㷨������ϣ����ںܶ���Ϣѧ���������ᵽ�ķ�֦�޽硢˫�������Լ� A*�㷨�� ���Ƕ��ǽ����������������㷨���ϵģ� Ϊ�������Ч�ʺͼ�ǿ��֦���ܶ����ã� ֻҪ�������п� ���� ������ �������Щ�㷨�Ƿǳ����׵����顣 ����֦�޽硱�㷨������˼���������չ���������ʱ��ͨ����������������������ķ�֦��Ŀ�� �����٣��������� 4������Ļ��֣�ͨ��Է�֦���Ͻ硱�͡��½硱�ķ������Ӷ�ﵽ��С��ռ䡪����������� �Ĺ�ģ��Ŀ�ġ������㷨�������������������⣬���ǿ���Ԥ�ȶ���һ���������С����ֵ���ܳ���С�ڣ� ÿ��ֵ���ﵽ��֦��Ŀ�ģ�����ϰ�� 3�������� 209 ҳ�ϵĵ�һ�⣩ �� ��˫���������㷨������˼������ء���ʼ�����󡱺� ��Ŀ������ǰ����������ͬʱ������ֱ���ҵ� һ��������㡱Ϊֹ�������㷨�����ڴӳ�ʼ��㵽Ŀ����������������ڿ�������㷨�С� ��A*���㷨����һ�ִ���ĳ�����ܵ������㷨��ͨ��Ҫ���һ�����ۺ������п��ܴﵽĿ��ֵ�Ĺ��ۣ� �� ����չ���Ĺ���У� �������ݹ��ۺ����ֵѡ�����Ľ�����չ�� ͬʱ�����������Ҫ���ϵ��޸Ĺ��ۺ���� ֵ�� ���ۺ�������û�й̶���֮���� ��ݲ�ͬ�����⣬ �в�ͬ�Ĺ��ۺ��� ����뽨���ڶ������������� ���� �ܽ��Ԥ�ں��ƶϣ���������ѧ�����ϡ�28��Ϣѧ������ѵ����---------------------------------------��ϰ��---------------------------------------------�� 1�� [��������] ����Ҫ���ҳ���������������ĸ���(���������Ȼ�� n): ������һ����Ȼ�� n��n��1000��, Ȼ��Դ���Ȼ�������·������д��? 1�������κδ��? 2���������߼���һ����Ȼ�����Ȼ���ܳ���ԭ���һ�룻 3��������󣬼���˹�����д��?ֱ�������ټ���Ȼ��Ϊֹ�� [����]: ���룺 6 ������������Ϊ 6 16 26 126 36 136 ����� 6 �� 2�� 1��ѡ�� ��֪ n ������ x1,x2,?,xn���Լ�һ������ k��k��n�� ���� n ����������ѡ k ��������ӣ��ɷֱ�� ��һϵ�еĺ͡����統 n=4��k��3��4 ������ֱ�Ϊ 3��7��12��19 ʱ���ɵ�ȫ������������ǵĺ�Ϊ�� 3��7��12=22 3��7��19��29 7��12��19��38 3��12��19��34�� ���ڣ�Ҫ����������Ϊ�����ж����֡� ��������ֻ��һ�ֵĺ�Ϊ����3��7��19��29�� �� [����]�� �������룬��ʽΪ�� n , k ��1<=n<=20��k��n�� x1,x2��?,xn ��1<=xi<=5000000�� [���]�� ��Ļ�������ʽΪ�� һ�������������������� �� [�����������]: ���룺 4 3 3 7 12 19 ����� 1(�˲��ֲ������)�� 3������ 209 ҳ�ϵĵ�һ��29��Ϣѧ������ѵ������ 4�������ƶ����⣺ �� n �����Ӻ� n �����ӣ���ʼ״̬�ڳ��������ӣ�ͼ�� n=3��:��һ�������ƶ�������ߣ�Ҫ����������ӣ�һ������ 1����ո��ڽ�����ӿ���һ������ո� 2�����ӿ�һ���һ����������ո񣬻���ӿ��Կ��һ����������ո� 3�����Ӳ��ܿ����ӣ����Ӳ��ܿ����ӽ���ո� ���д������ʾ�����ƶ����衣30�������ĵ�:
�����㷨pascal9ҳ 5�Ƹ�ֵ ������������㷨_Pascal 33ҳ 5�Ƹ�ֵ��ҪͶ��Υ������,�뵽�ٶ��Ŀ�Ͷ������;��Ҫ�����������������,�����˴����з����� ...����(��������㷨pascal)����(��������㷨pascal)_����������Ӧ��_IT/�����_רҵ���ϡ����ĵ������������㷨,�������������(DFS)��һЩ��ϰ�����������㷨���˹������е�һ�ֻ���...�����㷨�����ܽ�pascal�����㷨�����ܽ�pascal_IT/�����_רҵ���ϡ�1•N�ʺ�(λ�����) 2. ����ϸ���� 3•��ѩ 4•Sramoc���� ( Sramoc Problem ) 5•�ڰ�...pascal�㷨�ϼ�pascal�㷨�ϼ�_ѧ�ƾ���_���н���_����ר��pascal���Ա�д�ִ����� NOIP free ...2 �������� ����������:ÿ������ֵ����������������һ���� ֵ��С������...���㷨(pascal�汾)Pascal�㷨����������... 72ҳ ��ѻ�​��​��​��​(​p​a​...�� C++�� ������һ������ʵ��,����,��������,���� s ���Ͼ�Ҫ�Լ�����,����...pascal�㷨���㷨(pascal�汾) 30ҳ 2����ȯ pascal-���㷨ģ�� 21ҳ ��� Pascal����...���� ���㷨��:������������ݹ鷨�����ݷ���̰ �ķ������η��ȡ� 3.�㷨...Pascal�㷨Pascal�㷨_����������Ӧ��_IT/�����_רҵ���ϡ��㷨: �㷨�ǳ���Ļ�����һ���õ��㷨,�ٽ��б���,�� �㷨ת�����κ�һ����������������ʾ�ĳ����㷨...pascal�����㷨pascal�����㷨 ����>> һ�������㷨 1.����������Լ�� function gcd(a,b:integer):integer; begin if b=0 then gcd:=a else gcd:=gcd (b,a mod...NOIP(pascal)�����㷨�⼯NOIP(pascal)�����㷨����⼯ NOIP(pascal)�����㷨����⼯ ���͵�һ�� �㷨...�ڶ��� �㷨Ӧ��һ����������������������������п�������,�������ҳ����...PASCAL�㷨�ϼ�PASCAL�㷨�ϼ�_����ѧϰ_����ѧϰ_����ר��PASCAL�㷨�ϼ� ���㷨ģ�� һ�������㷨 1.����������Լ�� function gcd(a,b:integer):integer; begin if ...
pascal��������㷨 | pascal��������㷨 | pascal�㷨 | dijkstra�㷨pascal | pascal̰���㷨 | ���������㷨pascal | pascal �����㷨 doc | pascal�����㷨 ���� | ����ĵ�
pascal�㷨�����ʮ�������������(pascal)���Ƶݹ��㷨 pascalNOIP���㷨����̰�ĺͷ���pascal�����������Pascal���������㷨(Pascal)pascal�м��̵̳�����̰�ķ������㷨�����ܽ�pascal������������㷨_Pascalpascal�̳�3--̰�ķ�Pascal�߼��̳�-�㷨ƪ���㷨(pascal��)Pascal�����㷨����Pascal�����㷨�����ر������㷨(pascal) ��վ��ͼ