請問我這個廣度優先遍歷演算法出了什么問題,我除錯了好像是bfs里面for的條件不對,怎么修改呢?
//定位前后連接點
int FirstAdjVex(MGraph G , int v){
//回傳v的第一個鄰接點
int i;
for(i = 0 ; i < G->Nv ; ++i){
if(G->G[v][i].adj == 1 && Visited[i] == false)
return i;
}
return -1;
}//FirstAdjVex
int NextAdjVex(MGraph G , int u , int w){
//回傳v相對于w的下一個鄰接點
int i;
for(i = w ; i < G->Nv ; ++i){
if(G->G[u][i].adj == 1 && Visited[i] == false)
return i;
}
return -1;
}//NextAdjVex
void BFS(MGraph G,Vertex V,void(*Visit) (Vertex))
{
Queue Q;
int u,w;
Visit(V);
Visited[V]=true;
Q=init();
AddQ(&Q,V);
while(!IsEmpty(&Q))
{
u=DeleteQ(&Q);
for(w = FirstAdjVex(G, u); w >= 0; w = NextAdjVex(G, u, w)){
//依次檢查u的所有鄰接點w ,修改該陳述句使得能夠得到正確
if(Visited[w]!=-1 ){ //w為u的尚未訪問的鄰接頂點
Visit(w);
Visited[w] = true; //訪問w,并置訪問標志陣列相應分量值為true
AddQ(&Q,w); //w進隊
}//if
// printf("測速");
}//for
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/42720.html
標籤:C++ 語言
上一篇:求大神幫忙
