华为2014上机考试样题(6)

EnQueue(&q, index); //顶点入队
  visited[index] = TRUE; //入队表示已访问
  r1 = 0;
  r2 = 0;
  level[0][0] = index; //树的根节点存放的顶点号
  //r1表示层次数,r2表示本层的第几个叶结点
  dist[index][index] = r1 ; //表示该顶点到自身的距离为0

while(!QueueEmpty(&q)) //队列非空,则一直访问,直至访问完所有结点
  {
   int m;
   DeQueue(&q, &m); //队首出队
   if(m == level[r1][0]) //若出队的顶点号与第r1层的第一个结点的顶点号相同
   //即:出队的顶点号是某层第一个入队的结点,那么说明该层已经访问结束,进入下一层访问
   {
    r1 += 1; //进入下一层
    r2 = 0;  //下一层起点
   }

p = g->adjList[m].firstEdge; //按照邻接表各顶点边表的顺序访问每个顶点
   while(p)
   {
    if(!visited[p->eVerIndex])
    {
     EnQueue(&q, p->eVerIndex); //未访问的入队
     visited[p->eVerIndex] = TRUE; //入队表示已访问

level[r1][r2] = p->eVerIndex; //r1层r2叶结点的顶点号为当前访问的边表顶点号
     dist[index][p->eVerIndex] = r1; //根顶点与当前访问的顶点的距离,为当前访问的点所在的层次数
     r2 += 1; //该层访���结点数递增
    }
    p = p->nextEdge; //循环控制,指向下一个边表
   }
  }
 }
}

#ifdef DEBUG
void printBFS(int dist[VerNum][VerNum])
{
 cout << endl;
 for(int i=0; i<VerNum; i++)
 {
  cout << i <<":";
  for(int j=0; j<VerNum; j++)
  {
   cout << dist[i][j] << " ";
  }
  cout << endl;
 }
}
#endif

int main()
{
 InitData(); //初始化字符串数组,Data[]数组已经设置成了全局变量。。也可以设置在此处数组传参

graphList g; //建图
 CreateGraph(&g); //完善图的所有结点

#ifdef DEBUG //调试用,打印图
 printGraph(&g);
#endif

int dist[VerNum][VerNum]; //定义各顶点间距离数组
 for(int d1=0; d1<VerNum; d1++) //初始化距离数组
 {
  for(int d2=0; d2<VerNum; d2++)
  {
   dist[d1][d2] = 0; //表示顶点d1到顶点d2的距离
   //最大距离不会是VerNum,表示无法到达或有其他用途
  }
 }

BFSTraverse(&g, dist); //BFS搜索,保存各点最短路径

#ifdef DEBUG
 printBFS(dist); //打印各点间最短路径
#endif

string str1, str2; //用于保存两个输入的字符串
#ifdef DEBUG
 cout << "请输入两个站点:" << endl;
#endif
 cin >> str1 >> str2; //输入两个字符串,没有设置冗余,对于不符合规范的输入,只取前两个

int index1, index2; //用于保存将两个输入的字符串转换后的顶点号
 index1 = dataToIndex(str1); //将str1转换成相应顶点号
 index2 = dataToIndex(str2); //将str2转换成相应顶点号

//两点index1和index2间的距离即为dist[index1][index2],无向,则也等于dist[index2][index1]
#ifdef DEBUG
 cout << "两点间站点数为:" << endl;
#endif
 cout << dist[index1][index2] <<endl;

#ifdef DEBUG
 system("pause"); //暂停,以查看输出
#endif

return 0;
}

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:http://www.heiqu.com/a352ada98ba312afc72cd823d342aa9b.html