2动态程序设计.pptVIP

  • 0
  • 0
  • 约2.33万字
  • 约 55页
  • 2022-06-28 发布于重庆
  • 举报
从(x1,y1)出发,按照由左而右的顺序定义阶段的方向。位于(x,y)左方且可达(x,y)的跳马位置集合都是(x,y)的子问题,起点至(x,y)的路径数实际上等于起点至这些位置集的路径数之和(如下图)。 如此一来,状态转移关系便凸显出来。设状态转移方程map,其中map[i,j]为起点(x1,y1)至(i,j)的路径数目。由于棋盘规模的上限为50*50,可能导致路径数目大得惊人,因此不妨设map数组的元素类型为extended。初始时,除map[x1,y1]=1外其余为0。显然 。 我们采用动态程序设计的方法计算起点(x1,y1)至终点(x2,y2)的路径数目map[x2,y2]: 阶段j:中国象棋马当前的列位置(y1≤j≤y2); 状态i:中国象棋马在j列的行位置(1≤i≤n); 决策k:中国象棋马在(i,j)的起跳方向(1≤k≤4); begin 中国象棋马由(i,j)出发,沿着k方向跳至(x,y); if (x∈{1..n})∧(y∈{1..y2}) {计算状态转移方程} then map[x,y] ←map[i,j]+map[x,y] end;{for} writeln(map[x2,y2]:0:0);{输出从(x1,y1)到(x2,y2)的路径数目} fillchar(map,sizeof(map),0); map[x1,y1] ←1;{从(x1,y1)出

文档评论(0)

1亿VIP精品文档

相关文档