BFS算法:void BFS(MGraph &G,int n,VertexType v){for(v=0;v<n;++v)visited[v]=0;for(v=0;v<n;++v)if(!visited[v]) // v尚未訪問{int u,j;LinkQueue Q;InitQueue(Q); // 置空的輔助隊列Qcout<<" "<<G.vexs[v];visited[v]=1;EnQueue(Q,v); // v入隊列while(!QueueEmpty(Q)) // 若Q非空{DeQueue(Q,u); // 隊頭元素出隊,置為ufor(j=0;j<n;j++)if((G.arcs[u][j]!=0)&&!visited[j]){visited[j]=1;cout<<" "<<G.vexs[j];EnQueue(Q,j);}} //while} //if}
1 回答

長風秋雁
TA貢獻1757條經驗 獲得超7個贊
void BFS(MGraph &G,int n,VertexType v)
{
for(v=0;v<n;++v)
visited[v]=0;
// 怎么看都覺得下面的for有問題,仔細想想什么叫圖的廣度遍歷
for(v=0;v<n;++v)
if(!visited[v]) // v尚未訪問
{
int u,j;
LinkQueue Q;
InitQueue(Q); // 置空的輔助隊列Q
cout<<" "<<G.vexs[v];
visited[v]=1;
EnQueue(Q,v); // v入隊列
while(!QueueEmpty(Q)) // 若Q非空
{
DeQueue(Q,u); // 隊頭元素出隊,置為u
for(j=0;j<n;j++)
if((G.arcs[u][j]!=0)&&!visited[j])
{
visited[j]=1;
cout<<" "<<G.vexs[j];
EnQueue(Q,j);
}
} //while
} //if
}
- 1 回答
- 0 關注
- 168 瀏覽
添加回答
舉報
0/150
提交
取消