试题四(共15分)阅读以下说明和代码,填补代码中的空缺,将解答填入答题纸的对应栏内。【说明】图是很多领域中的数据模型,遍历是图的一种基本运算。从图中某顶点v出发进行广度优先遍历的过程是:①访问顶点v;②访问V的所有未被访问的邻接顶点W1,W2,..,Wk;③依次从这些邻接顶点W1,W2,..,Wk出发,访问其所有未被访问的邻接顶点;依此类推,直到图中所有访问过的顶点的邻接顶点都得到访问。显然,上述过程可以访问到从顶点V出发且有路径可达的所有顶点。对于从v出发不可达的顶点u,可从顶点u出发再次重复以上过程,直到图中所有顶点都被访问到。例如,对于图4-1所示的有向图G,从a出发进行广度优先遍历,访问顶点的一种顺序为a、b、c、e、f、d。图4-1 设图G采用数组表示法(即用邻接矩阵arcs存储),元素arcs[i][j]定义如下: 图4-1的邻接矩阵如图4-2所示,顶点a~f对应的编号依次为0~5.因此,访问顶点a的邻接顶点的顺序为b,c,e。函数BFSTraverse(GraphG)利用队列实现图G的广度优先遍历。相关的符号和类型定义如下:#defineMaxN:50/*图中最多顶点数*/typedefintAdjMatrix[MaxN][MaxN];typedefstruct{intvexnum,edgenum;/*图中实际顶点数和边(弧)数*/AdjMatrixarcs;/*邻接矩阵*/)Graph;typedefintQElemType;enum{ERROR=0;OK=l};代码中用到的队列运算的函数原型如表4-1所述,队列类型名为QUEUE。 表4-1实现队列运算的函数原型及说明 【代码】intBFSTraverse(GraphG){//图G进行广度优先遍历,图采用邻接矩阵存储unsignedchar*visited;//visited[]用于存储图G中各顶点的访问标志,0表示未访问intv,w;u; QUEUEQQ;∥申请存储顶点访问标志的空间,成功时将所申请空间初始化为0visited=(char*)calloc(G.vexnum,sizeof(char));If((1))retumERROR;(2);//初始化Q为空队列for(v=0;v<G.vexnum;v++){if(!visited[v]){//从顶点v出发进行广度优先遍历printf("%d”,v);//访问顶点v并将其加入队列visited[v]=l;(3);while(!isEmpty(Q)){(4);//出队列并用u表示出队的元素for(v=0;v<G.vexnum;w++){if(G.arcs[u][w]!=0&&(5)){//w是u的邻接顶点且未访问过printf("%d”,w);//访问顶点wvisited[w]=1;EnQueue(&Q,w);}}} }free(visited);returnOK;)//BFSTraverse从下列的2道试题(试题五至试题六)中任选1道解答。请在答题纸上的指定位置处将所选择试题的题号框涂黑。若多涂或者未涂题号框,则对题号最小的一道试题进行评分。
1、visited==NULL 2、InitQueue(&Q) 3、EnQueue(&Q,v) 4、DeQueue(&Q,&u) 5、visited==0