C++实例辅导(递归法解决商人渡河问题)
来源:优易学  2011-11-19 10:31:13   【优易学:中国教育考试门户网】   资料下载   IT书店

  int Duhe(int a,int b,int n) /*递归法解决商人渡河问题,如果这一个状态符合*/
  { /*则判断下一个状态,直至问题解决*/
  if(a==0&&b==0) return 1;
  if(n==0) /*判断0状态时,商匪状态是否符合要求*/
  {
  if(judge(a-1,b-1,4-a,4-b,1))
  {
  if(Duhe(a-1,b-1,1)==1)
  return 1;
  }
  if(judge(a,b-2,3-a,5-b,1))
  {
  if(Duhe(a,b-2,1)==1)
  return 1;
  }
  if(judge(a-2,b,5-a,3-b,1))
  {
  if(Duhe(a-2,b,1)==1)
  return 1;
  }
  if(judge(a-1,b,4-a,3-b,1))
  {
  if(Duhe(a-1,b,1)==1)
  return 1;
  }
  if(judge(a,b-1,3-a,4-b,1))
  {
  if(Duhe(a,b-1,1)==1)
  return 1;
  }
  else
  {
  Pop(0);
  return 0;
  }
  }
  if(n==1) /*判断0状态时,商匪状态是否符合要求*/
  {
  if(judge(a+1,b+1,2-a,2-b,0))
  {
  if(Duhe(a+1,b+1,0)==1)
  return 1;
  }
  if(judge(a,b+2,3-a,1-b,0))
  {
  if(Duhe(a,b+2,0)==1)
  return 1;
  }
  if(judge(a+2,b,1-a,3-b,0))
  {
  if(Duhe(a+2,b,0)==1)
  return 1;
  }
  if(judge(a+1,b,2-a,3-b,0))
  {
  if(Duhe(a+1,b,0)==1)
  return 1;
  }
  if(judge(a,b+1,3-a,2-b,0))
  {
  if(Duhe(a,b+1,0)==1)
  return 1;
  }
  else
  {
  Pop(1);
  return 0;
  }
  }
  return 0;
  }
  main()
  {
  link pointer;
  Push(3,3,0);
  Duhe(3,3,0);
  pointer=PPointer1;
  while(pointer!=NULL)
  {
  printf("%d,%d---%d ",pointer->x,pointer->y,pointer->state);
  pointer=pointer->next;
  }
  getch();
  }

上一页  [1] [2] 

责任编辑:小草

文章搜索:
 相关文章
热点资讯
资讯快报
热门课程培训