广度优先搜索和深度优先搜索

一、广度优先搜索基本思想:首先访问出发节点v,在访问v的临界点v1,v2,v3......,接着在访问再分别访问v1的临界点,v2的临界点,v3的临界点......这样循环下去知道与v相同的节点都被访问,循环终止。

算法框架:

①临界表表示的图

int visit[n];
bfs(int k,graph head[])
{
Queue Q;
edgenode *p;
InitQueue(Q);
EnQueue(k,Q);
visit[k]=1;
while(!EmptyQueue)
{
i=DeQueue(Q);
p=head[i].fristnode;
while(p!=NULL)
{
if(visit[p->adjvex]==0)
{
EnQueue(p->adjvex,Q);
visit[p->adjvex]=1;
}
p=p->next;
}
}
}

②邻接矩阵表示的图

int visit[n];
graph head[n][n];
bfsm(int k)
{
Queue Q;
InitQueue(Q);
EnQueue(k,Q);
visit[k]=1;
while(!EmptyQueue)
{
i=DeQueue(Q);
for(j=1;j<=n;j++)
{
if(head[i][j]==1&&visit[j]==0)
{
EnQueue(j,Q);
visit[j]=1;
}
}
}
}

二:深度优先搜索的基本思想:首先访问V节点,并标识为已访问,接着从V开始访问V的每一个邻接点,如果邻接点W没有被访问过则从W开始进行深度优先搜索,直至与V连通的所有节点都被访问过为止!

①邻接表表示的图

int visit[n];
graph head[n];
dfs(int k)
{
edgenode *p;
visit[k]=1;
p=head[k].firstnode;
while(p!=NULL)
{
if(visit[p->adjvex]==0)
dfs(p->adjvex);
p=p->next;
}
}

②邻接矩阵表示的图

int visit[n];
graph head[n][n];
dfsm(int k)
{
edgenode *p;
visit[k]=1;
for(j=1;j<=n;j++)
if(head[k][j]==1&&visit[j]==0)
dfsm(j);
}

三:广度优先搜索和深度优先搜索的区别

广度优先搜索成功找的就是最优解,但只能是一个。

如果要找出所有的最优解或所有可能的解则只能用深度优先搜索。另外回溯法也是建立在深度优先搜索之上的!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值