1. 程式人生 > >BFS(廣度優先搜尋)

BFS(廣度優先搜尋)

簡介

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;
		}
	}
}