广工 数据结构 7.23

来源:互联网 发布:安卓软件开发课程 编辑:程序博客网 时间:2024/05/01 00:08
7.23③ 同7.22题要求。试基于图的广度优先搜索策略写一算法。


实现下列函数:
Status BfsReachable(ALGraph g, int i, int j); 
/* Determine whether it exists path from vertex i to */
/* vertex j in digraph g with Breadth_First Search.  */
/* Array 'visited' has been initialed to 'false'.    */


图的邻接表以及相关类型和辅助变量定义如下:
Status visited[MAX_VERTEX_NUM];
typedef char VertexType;
typedef struct ArcNode {
    int adjvex;
    struct ArcNode *nextarc;
} ArcNode;


typedef struct VNode {
    VertexType data;
    ArcNode  *firstarc;
} VNode, AdjList[MAX_VERTEX_NUM];


typedef struct {
    AdjList vertices;
    int vexnum, arcnum;
} ALGraph;


Status InitQueue(Queue &q);
Status EnQueue(Queue &q, int e);
Status DeQueue(Queue &q, int &e);
Status QueueEmpty(Queue q);

Status GetFront(Queue q, int &e);

Status BfsReachable(ALGraph g, int i, int j) 
/* Determine whether it exists path from vertex i to */
/* vertex j in digraph g with Breadth_First Search.  */
/* Array 'visited' has been initialed to 'false'.    */
{
   
   Queue Q; 
   InitQueue( Q ); 
   EnQueue( Q, i ); 
   int u; 
   ArcNode *p;
   int k;
   while( ! QueueEmpty ( Q ) ) { 
       DeQueue( Q, u ); 
       visited[u] = 1; 
      
       for( p = g.vertices[u].firstarc; p; p = p->nextarc ) { 
           k = p->adjvex; 
           if( k == j ) return OK; 
           if( !visited[k] ) EnQueue( Q,k ); 
       } 
    } 
   return FALSE; 
}

0 0
原创粉丝点击