图的广度历遍算法(待完善)
来源:互联网 发布:python gui界面实例 编辑:程序博客网 时间:2024/05/02 02:35
#include <iostream.h>
#define MAX_VERTEX 20 //最大顶点数
//====================================================
struct Vertex //顶点结构体
{
int number; //顶点编号
char info; //顶点信息
};
struct MyGraph //图的邻接矩阵结构体
{
int Arcs[MAX_VERTEX][MAX_VERTEX]; //邻接矩阵的弧,数组表示
Vertex vertex[MAX_VERTEX]; //顶点,存放顶点信息
int vertex_num, arc_num; //顶点、弧总数
};
//====================================================
void BFSTraverse( MyGraph G, int v )
{
int m,n,i;
int visited[MAX_VERTEX]; //访问标志数组,最大为图G的顶点数
int queue[MAX_VERTEX]; //访问队列,最大为图G的顶点数
int front=0, rear=0; //初始化循环队列的头和尾
for( m=0; m<G.vertex_num; m++ ) //初始化访问数组,未访问的为0,访问过的为1
visited[m] = -1;
for( m=0; m<G.vertex_num; m++ )
{
if( visited[v]!=1 ) //若v尚未访问
{
cout<< v <<" ";
visited[v] = 1; //访问该结点后将其置为“已访问”
queue[rear] = v; //入队并将队尾加1
rear=(rear+1)%MAX_VERTEX; //模MAX_VERTEX是为了实现循环队列的功能
}
while( front!=rear ) //若队列不为空
{
front = (front+1)%MAX_VERTEX;
n = queue[front];
for( i=0; i<G.vertex_num; i++ )
{
if( visited[i]!=1 && G.Arcs[0][i]!=0 )
{
cout<<i<<" ";
visited[i] = 1; //访问该结点后将其置为“已访问”
queue[rear] = i; //入队并将队尾加1
rear=(rear+1)%MAX_VERTEX;
}
if( visited[i]!=1 && G.Arcs[i][0]!=0 )
{
cout<<i<<" ";
visited[i] = 1; //访问该结点后将其置为“已访问”
queue[rear] = i; //入队并将队尾加1
rear=(rear+1)%MAX_VERTEX;
}
}
}
}
}
//====================================================
void main()
{
MyGraph hao;
int A[6][6]={ //教材P162 图7.9(b) 的有向图
{0,5,0,7,0,0}, //共6个顶点,9条弧
{0,0,4,0,0,0},
{8,0,0,0,0,9},
{0,0,5,0,0,6},
{0,0,0,5,0,0},
{3,0,0,0,1,0}};
int i, j;
hao.vertex_num = 6; //设置图hao的顶点数为6个
hao.arc_num = 9; //设置图hao的弧数为6个
for( i=0; i<hao.vertex_num; i++ ) //初始化图hao
for( j=0; j<hao.arc_num; j++ )
hao.Arcs[i][j] = A[i][j];
BFSTraverse( hao, 0 );
cout<<endl;
}
/*程序输出如下: 不明白为甚最后一个结点“4”访问不到!!!
0 1 2 3 5
Press any key to continue
*/
- 图的广度历遍算法(待完善)
- 随机生成图,dijkstra算法求最短路径,深度、广度优先历遍【待更新其他算法】
- 图的历遍-深度优先历遍、广度优先历遍
- 各种经典排序算法的实现(待完善)
- 图的广度优先历遍和深度优先历遍
- 常见几种算法(待完善)
- 归并算法.(待完善)
- 一元多项式的运算 (待完善)
- shodan搜索引擎的运用(待完善)
- Android_apk的安装(待完善)
- 对HashMap的了解(待完善)
- UML类图学习(待完善)
- 闲杂(待完善)
- EditText(待完善)
- TextView(待完善)
- Button(待完善)
- 布局(待完善)
- 排序算法性能及选择总结(待完善)
- struts2 中select标签的用法 总结《网上汇编的》
- ExtJs学习笔记01
- pc机取得并修改arm linux IP地址 网关 子网掩码 主机名等信息
- ARM7在嵌入式应用中启动程序的实现
- 各种经典排序算法的实现(待完善)
- 图的广度历遍算法(待完善)
- 非递归实现前、中、后序历遍二叉树(Java实现)
- 中国现代教育个人体会
- 2010,新的一年。
- 祝大家新年快乐
- 坤哥走了
- 浅谈整数(一)|强推
- ruby与rt实现上标英文和拼音功能
- 《冒号论坛》开张