BFS(廣度優先搜尋)
阿新 • • 發佈:2019-01-01
簡介
BFS的過程是首先訪問起始結點v,接著訪問頂點v的所有未被訪問的鄰接結點,然後對每個繼續進行上述步驟,直到所有結點都被訪問過為止,當然,在訪問過程中,需要使用一個佇列,然後類似二叉樹的層次遍歷來訪問。
BFS通俗的來講,就如通病毒擴散一般蔓延。往往採用BFS求解迷宮問題的入口到出口的最短路徑。
運算步驟
void BFS(AdjGraph L,int v) { ANode *p; int queue[MAXV]; int front = 0; int rear = 0; int w; for(int i =0;i<L.pointsnum;i++)//初始化陣列 { visted[i] = 0; } cout<<" "<<L.adjlist[v].data; visted[v] = 1;//置已訪問 rear = (rear + 1 )% MAXV; queue[rear] = v; while(front != rear)//佇列不為空迴圈 { front = (front + 1)%MAXV; w = queue[front];//出隊 p = L.adjlist[w].firstarc; while( p != NULL)//查詢所有鄰接結點 { if(visted[p->adjvex]==0)//當前未被訪問 { cout<<" "<<L.adjlist[p->adjvex].data;//列印 visted[p->adjvex] = 1;//標記 rear = (rear + 1) % MAXV; queue[rear] = p->adjvex; } p = p->nextarc; } } }