| 
 | 
back to boardhelp!where is my program wrong? Posted by  girl 7 Feb 2003 08:06 type btype=record        x,y:integer        end; var b,c:array[1..1000] of integer;     a:array[1..1000] of btype;     m,n,i:integer;     v:array[1..1000] of boolean; function ok(x,dep:integer):boolean; var ff,min,t,f1,f2,i,j:integer;     e:array[1..1000] of integer; begin   ok:=true;   if b[a[x].x]=1 then   begin     t:=0;     f1:=0;     f2:=0;     for i:=1 to dep-1 do     if (a[c[i]].x=a[x].x) then     begin       inc(t);       e[t]:=i;       if i mod 2=0 then inc(f2)       else inc(f1);     end     else if (a[c[i]].y=a[x].x) then     begin       inc(t);       e[t]:=i;       if i mod 2=0 then inc(f2)       else inc(f1);     end;     inc(t);     e[t]:=dep;     if dep mod 2=0 then inc(f2)     else inc(f1);     if (t=1) then exit;     if (t>=2) and (f1=0) then     begin       ok:=false;       exit;     end;     min:=0;     min:=e[1];     for i:=2 to t do     if e[i]<min then min:=e[i];     if min=1 then exit;     for i:=2 to min do     begin        ff:=0;        for j:=1 to t do        if e[j] mod i=0 then inc(ff)        else break;        if ff=t then        begin          ok:=false;          exit;        end;     end;     if b[a[x].y]=1 then   begin     t:=0;     f1:=0;     f2:=0;     for i:=1 to dep-1 do     if (a[c[i]].x=a[x].y) then     begin       inc(t);       e[t]:=i;       if i mod 2=0 then inc(f2)       else inc(f1);     end     else if (a[c[i]].y=a[x].y) then     begin       inc(t);       e[t]:=i;       if i mod 2=0 then inc(f2)       else inc(f1);     end;     inc(t);     e[t]:=dep;     if (t=1) then exit;     if (t=2) and (f1=0) then     begin       ok:=false;       exit;     end;     if (t>2) and (f1=0) then     begin       ok:=false;       exit;     end;     min:=e[1];     for i:=2 to t do     if e[i]<min then min:=e[i];     for i:=2 to min do     begin        ff:=0;        for j:=1 to t do        if e[j] mod i=0 then inc(ff)        else break;        if ff=t then        begin          ok:=false;          exit;        end;     end; end; end; end; procedure search(dep:integer); var i,j:integer; begin   for i:=1 to m do   if ok(i,dep) and (v[i]=false) then   begin     v[i]:=true;     c[dep]:=i;     dec(b[a[i].x]);     dec(b[a[i].y]);     if dep=m then     begin       writeln('YES');       for j:=1 to m do         write(c[j]:5);         halt;     end     else search(dep+1);     c[dep]:=0;     inc(b[a[i].x]);     inc(b[a[i].y]);     v[i]:=false;   end; end; begin   read(n,m);   fillchar(v,sizeof(v),0);   fillchar(a,sizeof(a),0);   fillchar(b,sizeof(b),0);   for i:=1 to m do   begin     read(a[i].x,a[i].y);     inc(b[a[i].x]);     inc(b[a[i].y]);   end;   search(1);   writeln('NO'); end.  |  
  | 
|