BFS广度优先遍历算法
来源:互联网 发布:索尼淘宝签约店 编辑:程序博客网 时间:2024/04/29 09:31
/*图的广度优先遍历算法
author:wuzuquan
last modify:2008-1-8
*/
#include <stdlib.h>
#include <stdio.h>
#include "queue.h"//specify the queue structure
#define VNUM 8 //定义顶点的个数
#define MAX ((VNUM)*(VNUM))
#define WHITE 0
#define GRAY 1
#define BLACK 2
#define INFINITE 10000//定义无穷远的距离
#define INIT 10000//无父结点
int list[20]={ 1,4,
5,0,
3,5,6,
2,6,7,
0,
1,2,6,
2,3,5,7,
3,6};//邻接表表示输入图
int head[VNUM+1]={0,2,4,7,10,11,14,18,20};//r s t u v w x y z在list中的起始位置
int color[VNUM];//顶点u颜色储存于color[u]中
int parent[VNUM];//顶点u的父母存储于parent[u]中
int d[VNUM];//算法技术出来的源顶点S和顶点u的距离存储于d[u]中
void bfs(int *list,int source)
{
int i=0,u=0;
int current;//current vertex
Queue *Q=NULL;//定义一个FIFO的队列
for(;i<VNUM;i++)
{//initialize
if(i==source)
continue;
color[i]=WHITE;
d[i]=INFINITE;//无穷远的距离
parent[i]=INIT;//表示没有父结点
}
//对源顶点进行初始化
color[source]=GRAY;
d[source]=0;
parent[source]=INIT;
Q=EnQueue(Q,source);//将source插入队列
while(Q!=NULL)
{
Q=DeQueue(Q,¤t);//删除队首并将队首的值存入U中
for(i=head[current];i<head[current+1];i++)
{//遍历各个与current相连的顶点
u=list[i];
if( color[u] == WHITE )
{
color[u]=GRAY;
d[u]=d[current]+1;
parent[u]=current;
Q=EnQueue(Q,u);//将current的邻接顶点插入队列
}
}
color[current]=BLACK;
printQueue(Q);//输出当前队列的元素
}
}
void find_path(int *parent,int dest)
{//回溯法,从source到dest的最短路径
int p=dest;
while(p!=INIT)
{
printf("%d--",p);
p=parent[p];
}
}
int main()
{
int source=1;
int i=0;
bfs(list,source);//执行广度优先遍历
for(;i<VNUM;i++)
{
printf("d[%d]=%d %d/n",i,d[i],parent[i]);
}
find_path(parent,4);
return 0;
}
- BFS广度优先遍历算法
- 广度优先遍历BFS的图算法
- 广度优先遍历BFS
- BFS广度优先遍历
- BFS广度优先遍历
- 广度优先遍历BFS
- 广度优先算法BFS
- BFS广度优先算法
- 图的遍历算法BFS广度优先算法h
- 广度优先搜索遍历(BFS)
- BFS广度优先搜索遍历
- 【算法导论】图的广度优先搜索遍历(BFS)
- 算法学习 - 图的广度优先遍历(BFS) (C++)
- 《图论》——广度优先遍历算法(BFS)
- 树的广度深度优先遍历算法 DFS BFS
- 算法 BFS广度优先搜索
- 广度优先算法(BFS)
- 【算法】--广度优先搜索BFS
- 亮剑&越狱&士兵突击
- 跟我一起写 Makefile
- Spring2.5的新特性
- 2008 Windows Vista 依然曙光难现
- Ubuntu 7.10 播放rmvb视频
- BFS广度优先遍历算法
- BFS中使用到的queue.h
- 几个Ext的学习站点
- cs中不能直接写session的问题的解决方法!
- 股票---- 资金在线-个股资金流向与大单分析系统
- Java读写文件的例子
- 一个webservice图片验证码的方法
- Asp.Net+Ajax+Access数据库实现的树形菜单
- 使用 Ruby on Rails 快速开发 Web 应用程序