调用一次深度优先遍历可以访问到图中的所有顶点
使用集成开发环境的DEBUG调试,仔细观察程序执行过程中相关变量变化情况,问题可自己解决,对你自己提高也很有帮助的。
呵呵~~楼主的意思我不是很明白,是说建立一个图,然后实现深度优先搜索与广度优先搜索对么??如果我理解的没错的话,那么下面这个程序将是你需要的~
#include
#define max 8;
typedef struct Enode
{
int adjvex;
struct Enode *next;
}*Pointer;
typedef struct Vnode
{
int vertex;
Enode *link;
}adjlist[8];
int Visited[8]={0,0,0,0,0,0,0,0};
void build_adjlist(adjlist &ga)
{
int n,e,i,j;
Pointer p;
cout<<"顶点数和边数:";
cin>>n>>e;
for(i=0;i<n;i++)
{
ga[i].vertex=i;
ga[i].link=NULL;
}
for(int k=0;k<e;k++)
{
cout<<"dingdiandui:";
cin>>i>>j;
p=new Enode;
p->adjvex=j;
p->next=ga[i].link;
ga[i].link=p;
p=new Enode;
p->adjvex=i;
p->next=ga[j].link;
ga[j].link=p;
}
/*for(int k=0;k<2*e;k++)
{
cout<<"顶点对:";
cin>>i>>j;//(i,j)顶点对
p=new struct Enode;
p->adjvex=j;
p->next=NULL;
if(ga[i].link=NULL)
{
ga[i].link=p;
p1=p;
}
else
{
p1->next=p;
p1=p1->next;
}*/
}
void jianyan(adjlist &ga)
{
Pointer p;
int n;
cout<<"请输入顶点数:";
cin>>n;
for(int i=0;i<n;i++)
{
cout<<ga[i].vertex<<" ";
p=ga[i].link;
while(p!=NULL)
{
if(p->next!=NULL)
{
coutadjvex<<" ";
p=p->next;
}
else
{
coutadjvex<<endl;
p=p->next;
}
}
}
}
void dfs(adjlist &ga,int v0)
{
Pointer p;
cout<<v0<<endl;
Visited[v0]=1;
p=ga[v0].link;
while(p!=NULL)
{
if (Visited[p->adjvex]==0)//*
dfs(ga,p->adjvex);
else
p=p->next;
}
}
void bfs(adjlist &ga,int v0)
{
Pointer p;
int v,f,r;
for(int i=0;i<8;i++)
{
Visited[i]=0;
}
int q[50];
cout<<v0<<endl;
Visited[v0]=1;
f=0;
r=0;
p=ga[v0].link;
do
{
while(p!=NULL)
{
v=p->adjvex;
if(Visited[v]==0)
{
q[r]=v;
r++;
cout<<v<<endl;
Visited[v]=1;
}
p=p->next;
}
if(f!=r)
{
v=q[f];
f++;
p=ga[v].link;
}
}
while((p!=NULL)||(f!=r));
}
void main()
{
adjlist ga;
int v;
build_adjlist(ga);
jianyan(ga);
cout<<"请输入起始顶点:";
cin>>v;
cout<<"shendu:"<<endl;
dfs(ga,v);
cout<<"guangdu:"<<endl;
bfs(ga,v);
}
这个程序是我上星期亲自编写而且已经验收过的,其中存贮结构用的是邻接表法,代码中的“jianyan”函数的功能是输出你所建立的邻接表从而检查你的图建立的是否正确,“dfs”和“bfs”两个函数分别是深度优先搜索(bfs)与广度优先搜索的函数,图的建立思路用和书上的一样.由于验收的比较仓促所以函数没有经过细致的优化,不过请楼主放心,这个代码是觉得没有错的,如果有什么不懂的话楼主可以hi我~~~~~~~我这里还编写了一个与书本上思路不一样的建立程序,但是害怕楼主看不懂,所以就不给你发了哈~
无向非连通图一次遍历只能访问到起点所在的连通分量,一个非连通无向图中有几个连通分量就需要从各个分量分别开始遍历才能访问到所有的顶点
有向的非强连通图则需要看起点如何,可能有些起点可以访问到其他顶点,可能有些不能
调用一次深度优先遍历可以访问到图中的所有顶点
无向的连通图就是或者有向的强连通图通过任意一个顶点都能够(直接或者通过其他顶点间接地)访问到其他所有顶点,自然一次深度优先遍历就可以访问到所有顶点 无向非连通图一次遍历只能访问到起点所在的连通分量,一个非连通无向图中有几个连通分量就需要从各个分量分别开始遍历才能访问到所有的顶点 有向的...
对连通图进行一次先深遍历可访问图的全部顶点,对吗
如果是无向的连通图或者有向的强连通图,是对的,对于无向的非连通图就不可能一次遍历访问到所有顶点了,对于有向的非强连通图则有可能对,有可能不对
一个图 经过 深度优先遍历后 生产的是一颗什么树··(我知道是深度优先...
一棵深度优先生成树。图的深度优先遍历类似于树的先序遍历。特点是尽可能先往深方向进行搜索。所以,从这可以知道,遍历的第一个点将是生成树的根节点。每个顶点至多调用一次DFS函数。而且一旦某个顶点被标志成已被访问,就不再从它出发进行搜索。遍历图的过程实质上是对每个顶点查找其邻接点的过程。其...
数据结构之深度优先遍历
图的遍历(Traversing Graph) 从图中某一顶点出发访遍图中其余顶点 且使每一个顶点仅被访问一次 图的遍历有两种方法 深度优先搜索和广度优先搜索 深度优先遍历 深度优先遍历(Depth First Traversal) 首先访问出发点v 并将其标记为已访问过 然后依次从v出发搜索v的每个邻接点w 若w未曾访问过 则以...
什么是深度优先遍历策略,广度优先遍历策略?
深度优先遍历的算法 根据深度优先算法的特性,可以使用栈先入后出的特性实现。将探索过的点存入栈内,遇到走不通的时候将栈顶元素出栈回到上一个元素,实现回溯。广度优先遍历的算法 根据广度优先算法需要按序回顾之前走过的顶点顺序的特性,可以使用队列先入先出来进行实现。
Python算法系列—深度优先遍历算法
深度优先遍历:前序、中序和后序都是深度优先遍历 从根节点出发直奔最远节点,广度优先遍历:首先访问举例根节点最近的节点,按层次递进,以广度优先遍历上图的顺序为:1-2-3-4-5-6-7 三、面试题+励志 企鹅运维面试题:1.二叉树遍历顺序:看上文 2.用你熟悉的语言说说怎么创建二叉树? python看...
广度优先遍历和深度优先遍历的区别
1、实现方式不同:深度优先遍历对每一个的分支路径深入到不能再深入为止,而且每个节点只能访问一次;广度优先遍历系统地展开并检查图中的所有节点,以找寻结果。2、占用空间不同:深度优先遍历不全部保留节点,占用空间少,有回溯操作,运行速度慢;广度优先遍历保留全部节点,占用空间大,无回溯操作,运行...
SJTU 《算法设计与分析》备考题
1、调用一次深度优先遍历可以访问到图中的所有顶点。(F) 2、分块查找的平均查找长度不仅与索引表的长度有关,而且与块的长度有关。(T) 3、冒泡排序在初始关键字序列为逆序的情况下执行的交换次数最多。(T) 4、满二叉树一定是完全二叉树,完全二叉树不一定是满二叉树。(T) 5、设一棵二叉树的先序序列和后序...
数据结构 深度优先遍历
广度优先遍历:广度优先就是从树的某个节点开始搜索,将他的所有的节点先用队列机制保存,找完节点后,处理队列中的节点,处理时,如果某个节点又有邻接点就进队列,以此访问完整个树,这个访问相当与二叉树的层次遍历访问。我的语言表达能力有限,不知能否看懂。所以这题,依次往下跑,到H时跑不动了,...
简述深度优先搜索遍历的方法。
简述深度优先搜索遍历的方法?深度优先搜索算法(Depth-First-Search, DFS),最初是一种用于遍历或搜索树和图的算法,在LeetCode中很常见,虽然感觉不难,但是理解起来还是有点难度的。简要概括,深度优先的主要思想就是“不撞南墙不回头”,“一条路走到黑”,如果遇到“墙”或者“无路可走”时再去走...
饶屠三黄:[答案] 无向的连通图就是或者有向的强连通图通过任意一个顶点都能够(直接或者通过其他顶点间接地)访问到其他所有顶点,自然一次深度优先遍历就可以访问到所有顶点 无向非连通图一次遍历只能访问到起点所在的连通分量,一个非连通无向图中有几...
闵行区17561777996: 对于任意一个图,从它的某个结点进行一次深度或广度优先遍历可以访问到该图的每个顶点这句话为什么是错的,求详解 - ?
饶屠三黄:[答案] 如果是无向的连通图或者有向的强连通图,是对的,对于无向的非连通图就不可能一次遍历访问到所有顶点了,对于有向的非强连通图则有可能对,有可能不对
闵行区17561777996: 数据结构的查找和排序 - ?
饶屠三黄: 1-5 错 错 错 错 对6-10 对 对 错 对 对11-15错 对 对 错 对16-20错 错 对 错 错21-25对 错 错 对 对26 对
闵行区17561777996: 对连通图进行一次先深遍历可访问图的全部顶点,对吗? - ?
饶屠三黄: 图的遍历从图中某一顶点出发,按某种搜索方法访遍其余顶点,且使每一顶点仅被访问一次.这一过程称为图的遍历. 遍历图的基本搜索方法有两种:深度优先搜索DFS(Depth First Search)和广度优先搜索BFS(Broad First Search).这两种...
闵行区17561777996: 一个图中包含k个连通分量,若按深度优先(DFS)搜索方法访问所有结点,则必须调用( )次深度优先遍历算法 - ?
饶屠三黄: 一个图中包含k个连通分量,若按深度优先(DFS)搜索方法访问所有结点,则必须调用( k)次深度优先遍历算法.所有的搜索算法从其最终的算法实现上来看,都可以划分成两个部分──控制结构和产生系统,搜索算法简而言之就是穷举所...