导航:首页 > 源码编译 > 广度优先算法的复杂度

广度优先算法的复杂度

发布时间:2025-04-26 15:53:56

‘壹’ 急!!C++深度优先算法和广度优先算法

以搜索为例,下面两种介绍了深搜与广搜的具体实现。
算法博大精深,望楼主好好学习啊
1. 深度搜索
void Graph::DFS(const int v, int visited[])
{
cout<<GetValue(v)<<"";//访问顶点 v
visited[v] = 1; //顶点 v 作访问标记
int w = GetFirstNeighbor(v););//取 v 的第一个邻接顶点 w
while(w != -1) //若邻接顶点 w 存在
{
if(!visited[w])//若顶点 w 未访问过, 递归访问顶点 w
DFS(w, visited);
w = GetNextNeighbor(v, w);//取顶点 v 的排在 w 后面的下一个邻接顶点
}
}
void Graph::UseDFS()
{
visited = new Boolean[n];
for(int i = 0; i < n; i++)
visited[i] = 0;
DFS(0);
delete[] visited;
}
算法分析:
(1)图中有 n 个顶点,e 条边。
(2)如果用邻接表表示图,沿 link 链可以找到某个顶点 v 的所有邻接顶点 w。由于总共有 2e 个边结点,所以扫描边的时间为O(e)。而且对所有顶点递归访问1次,所以遍历图的时间复杂性为O(n+e)。
(3)如果用邻接矩阵表示图,则查找每一个顶点的所有的边,所需时间为O(n),则遍历图中所有的顶点所需的时间为O(n2)。
2. 广度优先搜索
void BFS(Graph G, int visited[])
{//按广度优先非递归遍历图G。使用辅助队列Q和访问标志数组visited.
for(v = 0; v < G.vexnum; v++)
visited[v] = false;
Quene q;
for(v = 0; v < G.vexnum; v++)
if(!visited[v])
{
visited[v] = true;
EnQuene(Q,v);
while(!QueneEmpty(Q))
{
DeQuene(Q,u);
for(w = FirstAdjVex(G, u); w; w = NextAdjVex(G, u, w))
if(!visited[w])
{
visited[w] = true;
EnQuene(Q, w);
}//if
}//while
}//if
}//BFS
算法分析:
每个顶点至多进一次队列。遍历图的过程实质上是通过边或弧找邻接点的过程,因此广度优先搜索遍历图的时间复杂度和深搜相同。

阅读全文

与广度优先算法的复杂度相关的资料

热点内容
平板的访客模式如何加密 浏览:139
钉钉加密有用吗 浏览:112
加密u盘好还是不加密的 浏览:349
微观经济学平狄克第八版pdf 浏览:404
linux查看实时流量 浏览:557
如何存档到服务器 浏览:548
flash编程书籍推荐 浏览:835
php获得数组键值 浏览:401
香港云服务器操作 浏览:303
wpe最新源码 浏览:857
自己购买云主服务器推荐 浏览:422
个人所得税java 浏览:761
多余的服务器滑道还有什么用 浏览:192
pdf劈开合并 浏览:29
不能修改的pdf 浏览:752
同城公众源码 浏览:489
一个服务器2个端口怎么映射 浏览:298
java字符串ascii码 浏览:79
台湾云服务器怎么租服务器 浏览:475
旅游手机网站源码 浏览:332