扫码加入训练营

牢记核心词

学习得礼盒

计算机考研:数据结构常用算法精析(7)

2013-12-11 14:39:50来源:新东方在线编辑

  即path[i][j]存放路径(vi…vj)上vi之后继顶点的序号∥

  for (i=0;i

  for (j=0;j

  { if (G.A[i][j]

  path[i][j]=j; ∥若∈R,vi当前后继为vj∥

  else

  path[i][j]=-1; //否则为-1//

  D[i][j]=G.A[i][j];

  }

  for (k=0;k

  for (i=0;i

  for (j=0;j

  if (D[i][j]>D[i][k]+D[k][j])

  { D[i][j]=D[i][k]+D[k][j]; ∥取小者∥

  Path[i][j]=path[i][k]; ∥改vi的后继∥

  }

  for (i=0;i

  for (j=0;j

  { printf (“\n %d”, D[i][j]); ∥输出vi到vj的最短路径长度∥

  k=path[i][j]; ∥取路径上vi的后继vk∥

  if (k==-1)

  printf (“%d to %d no path \n”,i,j); ∥vi到vj路径不存在∥

  else

  { printf (“(%d”,i); ∥输出vi的序号i∥

  while (k!=j) ∥k不等于路径终点j时∥

  { printf (“,%d”,k); ∥输出k∥

  k=path[k][j]; ∥求路径上下一顶点序号∥

  }

  printf (“%d) \n”,j); ∥输出路径终点序号∥

  }

  }

  }

  深度优先搜索遍历(非递归的)

  void Traver(AdjList g,vertype v)

  //图g以邻接表为存储结构,算法从顶点v开始实现非递归深度优先遍历。

  { struct arc *stack[];

  visited[v]=1;

  printf(v); //输出顶点v

  top=0;

  p=g[v].firstarc;

  stack[++top]=p;

  while(top>0 || p!=null)

  { while (p)

  if (p && visited[p->adjvex]) p=p->next;

  else

  { printf(p->adjvex);

  visited[p->adjvex]=1;

  stack[++top]=p;

  p=g[p->adjvex].firstarc;

  }//else

  if (top>0) {p=stack[top--]; p=p->next; }

  }//while

  }//算法结束。

考研公开课小程序

本文关键字: 计算机 考研 数据结构

考研英语核心词汇营

背词+听课+练习+督学,学习得礼盒

更多资料
更多>>
更多内容

关注新东方在线考研服务号

获得21考研真题及答案解析

1. 打开手机微信【扫一扫】,识别上方二维码;
2.点击【关注公众号】,获取资料大礼包。

考研资料大礼包
近10年考研真题及答案免费下载
更多>>
更多公开课>>
更多>>
更多资料