软件设计师模拟试题

  #include "stdio.h"

  #define k 15 /*假定数组有15个数*/

  char a[k]={'r','w','b','r','r','b','w','w','b','b','b','w','r','r','w'}; /*r,b,w代表红,蓝,白*/

  main()

  {int i,ii;

  char t;

  int m,n,p;

  m=0; /*m为红色末尾指针*/

  n=0; /*n为白色末尾指针*/

  p=14;/*p为蓝红色头指针*/

  for (ii=0;ii<15;ii++)

  printf("%c",a[ii]);

  while(n<=p)

  {

  if (a[n]=='r') {t=a[n];a[n]=a[m];a[m]=t;m++;n++;}

  else if (a[n]=='w') n++;

  else {

  t=a[n];a[n]=a[p];a[p]=t;p--;n++;

  if (a[n-1]=='r') {t=a[n-1];a[n-1]=a[m];a[m]=t;m++;}

  }

  for (i=0;i<15;i++)

  prinrf("%s",a[n]);

  }

  货郎问题????

  一笔画问题

  const max=6;{顶点数为6}

  type shuzu=array[1..max,1..max]of 0..max;

  const a:shuzu {图的描述与定义 1:连通;0:不通}

  =((0,1,0,1,1,1),

  (1,0,1,0,1,0),

  (0,1,0,1,1,1),

  (1,0,1,0,1,1),

  (1,1,1,1,0,0),

  (1,0,1,1,0,0));

  var

  bianshu:array[1..max]of 0..max; {与每一条边相连的边数}

  path:array[0..1000]of integer; {记录画法,只记录顶点}

  zongbianshu,ii,first,i,total:integer;

  procedure output(dep:integer); {输出各个顶点的画法顺序}

  var sum,i,j:integer;

  begin

  inc(total);

  writeln('total:',total);

  for i:=0 to dep do write(Path);writeln;

  end;

  function ok(now,i:integer;var next:integer):boolean;{判断第I条连接边是否已行过}

  var j,jj:integer;

  begin

  j:=0; jj:=0;

  while jj<>i do begin inc(j);if a[now,j]<>0 then inc(jj);end;

  next:=j;

  {判断当前顶点的第I条连接边的另一端是哪个顶点,找出后赋给NEXT传回}

  ok:=true;

  if (a[now,j]<>1) then ok:=false; {A[I,J]=0:原本不通}

  end; { =2:曾走过}

  procedure init; {初始化}

  var i,j :integer;

  begin

  total:=0; {方案总数}

  zongbianshu:=0; {总边数}

  for i:=1 to max do

  for j:=1 to max do

  if a[i,j]<>0 then begin inc(bianshu);inc(zongbianshu);end;

  {求与每一边连接的边数bianshu}

  zongbianshu:=zongbianshu div 2; {图中的总边数}

  end;

  procedure find(dep,nowpoint:integer); {dep:画第几条边;nowpoint:现在所处的顶点}

  var i,next,j:integer;

  begin

  for i:=1 to bianshu[nowpoint] do {与当前顶点有多少条相接,则有多少种走法}

  if ok(nowpoint,i,next) then begin {与当前顶点相接的第I条边可行吗?}

  {如果可行,其求出另一端点是NEXT}

  a[nowpoint,next]:=2; a[next,nowpoint]:=2; {置成已走过标志}

  path[dep]:=next; {记录顶点,方便输出}

  if dep < zongbianshu then find(dep+1,next) {未搜索完每一条边}

关注本地宝
返回首页

推荐排行

最新阅读


反馈