领接表的建立和它的DFS, BFS;;;
//图的建立的实现->邻结矩阵和邻结表两种表示方法
#include <cstdio>
#include <cstdlib>
//#define _OJ_ int visit[100];
typedef struct Lnode
{
int data; //邻结点的位置下标
// int weight;
struct Lnode *next; //表由多排的链表组成 } Lnode, *Linklist; typedef struct Fnode
{
int elem; //每个顶点的信息 是数字或是字符
Linklist firstcell; //构成多个头节点
} Fnode1[100]; typedef struct Graph1
{
int nv;
int ne;
Fnode1 G; //图由顶点数,边数,和邻接表组成
} Graph1, *Graph; typedef struct Edge1
{
int v1;
int v2;
// int weight; //边由两个顶点的值构成
} Edge1, *Edge; Graph
creat_graph(int vertex, int edge)
//分配边数和节点数并初始化
{
int i;
Graph g;
g = (Graph) malloc (sizeof(Graph1));
g->nv = vertex;
g->ne = edge; for(i = 0;i < vertex; i++) {
g->G[i].firstcell = NULL; //把每一个头接点赋初值
g->G[i].elem = i; //输入每个节点的信息
} return g;
} void
inser_edge(Graph g, Edge e)
{
Linklist L, L1;
L = (Linklist) malloc (sizeof(Lnode));
L->data = e->v2;
L->next = g->G[e->v1].firstcell;
g->G[e->v1].firstcell = L;
//无向图的插入两边 每次增加一个节点将其插入在最前面
L1 = (Linklist) malloc (sizeof(Lnode));
L1->data = e->v1;
L1->next = g->G[e->v2].firstcell;
g->G[e->v2].firstcell = L1;
} Graph
build_Graph(void)
{
Graph g;
Edge e;
int i, j, vertex, edge;
scanf("%d %d", &vertex, &edge);
g = creat_graph(vertex, edge); if(edge > 0) {
e = (Edge) malloc (sizeof(Edge1));
for(i = 0;i < edge; i++) {
scanf("%d %d", &e->v1, &e->v2);
inser_edge(g, e);
} return g;
}
} void
DFS(Graph g, int v)
{
int i;
visit[v] = 1;
printf("%d ", g->G[v].elem); while (g->G[v].firstcell->next != NULL) {
if(visit[g->G[v].firstcell->data] == 0)
DFS(g, g->G[v].firstcell->data);
g->G[v].firstcell = g->G[v].firstcell->next;
} } void
DFS_travers(Graph g)
{
int i;
for(i = 0;i < g->nv; i++)
visit[i] = 0; for(i = 0;i < g->nv; i++)
if(visit[i] == 0) DFS(g, i);
} typedef struct Queue1
{
int top;
int base;
int *data1;
} Queue1, *Queue; Queue
creat_queue(void)
{
Queue q;
q = (Queue) malloc (sizeof(Queue1));
q->data1 = (int*) malloc (100 * sizeof(int));
q->base = q->top = 0;
return q;
} int
isempty(Queue q)
{
if(q->base == q->top)
return 1;
else
return 0;
} void
Enqueue(Queue q, int data)
{
q->data1[q->top++] = data;
} int
Dequeue(Queue q)
{
return q->data1[q->base++];
} void
BFS(Graph g, int v)
{ int i;
Queue q;
Linklist L;
q = creat_queue();
printf("%d ", g->G[v].elem);
visit[v] = 1;
Enqueue(q, v); while (isempty(q) != 1) {
i = Dequeue(q);
L = g->G[i].firstcell;
while (L) {
if(visit[L->data] == 0) {
printf("%d ", g->G[L->data].elem);
visit[L->data] = 1;
Enqueue(q, L->data);
}
L = L->next;
}
} } void
BFS_travers(Graph g)
{
int i;
for(i = 0;i < g->nv; i++)
visit[i] = 0;
for(i = 0;i < g->nv; i++) {
if(visit[i] == 0)
BFS(g, i);
}
} int main(int argc, char const *argv[]) {
#ifndef _OJ_ //ONLINE_JUDGE
freopen("input.txt", "r", stdin);
#endif int i, j;
Graph g;
g = build_Graph();
// for(i = 0;i < g->nv; i++) {
// //printf("%p\n", g->G[i].firstcell); //循环重复的遍历每一条链表
// printf("%d -> ", i);
// while (g->G[i].firstcell != NULL) {
// printf("%d ",g->G[i].firstcell->data);
// g->G[i].firstcell = g->G[i].firstcell->next;
// }
// printf("\n");
// }
DFS_travers(g);
// BFS_travers(g); return 0;
}
/*
8 9
0 1
0 2
1 3
1 4
2 5
2 6
3 7
4 7
5 6
vertex:A→:2→:1
vertex:B→:4→:3→:0
vertex:C→:6→:5→:0
vertex:D→:7→:1
vertex:E→:7→:1
vertex:F→:6→:2
vertex:G→:5→:2
vertex:H→:4→:3
建立无误
BFS: 0 2 1 6 5 4 3 7
DFS: 0 2 6 5 1 4 7 3
*/
领接表的建立和它的DFS, BFS;;;的更多相关文章
- hive外部表的建立与数据匹配
1.建立hive的外部表匹配hdfs上的数据 出现如下报错: hive (solar)> ; OK Failed with exception java.io.IOException:java. ...
- SPFA中 正逆邻接表的建立
正邻接表的建立: 先定义一个结构体: struct node { int r,v,w,next; }Map[]; 每输入一组数据 就通过Add函数加入到邻接表中,上图已经说得很明白了,结合着下面的代码 ...
- POJ 3275 Ranking the Cows(传递闭包)【bitset优化Floyd】+【领接表优化Floyd】
<题目链接> 题目大意:FJ想按照奶牛产奶的能力给她们排序.现在已知有N头奶牛$(1 ≤ N ≤ 1,000)$.FJ通过比较,已经知道了M$1 ≤ M ≤ 10,000$对相对关系.每一 ...
- Hive表的建立和导入导出数据
Hive是Hadoop的常用工具之一,Hive查询语言(HiveQL)的语法和SQL类似,基本实现了SQL-92标准. 1. 表的建立 编写以下的文件: USE test; DROP TABLE IF ...
- Django数据库的查看、删除,创建多张表并建立表之间关系
配置以下两处,可以方便我们直接右键运行tests.py一个文件,实现对数据库操作语句的调试: settings里面的设置: #可以将Django对数据库的操作语法,能输出对应的的sql语句 LOGGI ...
- oracle11gR2下scott用户以及表的建立
目录 oracle11gR2下scott用户以及表的建立 找到系统带的sql文件(utlsample.sql) 根据SQL的内容操作 新建用户并授权 scott登录 表操作 查询表(使用pl/sql) ...
- GG_Model 类库与数据库表对应建立实体类
3.4.GG_Model 类库与数据库表对应建立实体类 我这里不教大家写代码,直接用TT模板自动生成,省去写代码的麻烦. A. 三个文件MysqlDbhelper.ttinclude .mysqlMa ...
- [MySQL数据库之表的约束条件:primary key、auto_increment、not null与default、unique、foreign key:表与表之间建立关联]
[MySQL数据库之表的约束条件:primary key.auto_increment.not null与default.unique.foreign key:表与表之间建立关联] 表的约束条件 约束 ...
- 关于《hibernate多对多》有中间表的建立
角色 与 菜单(资源)的多对多关系,在这里我们建立中间表,用两个oneToMany实现 实体类: 角色(GmRole) 菜单(GmMenu) 中间表(GmRoleRight) 1.在角色实体中 pa ...
随机推荐
- LINQ to SQL 语句(3) 之 Count/Sum/Min/Max/Avg
LINQ to SQL 语句(3) 之 Count/Sum/Min/Max/Avg [1] Count/Sum 讲解 [2] Min 讲解 [3] Max 讲解 [4] Average 和 Agg ...
- Eclipse中调试技巧
1.打印输出 System.outprintln(“执行了此程序"); 2.运用Log方法: 示例 Log.d("myDubug", "myFirstDebu ...
- 使用Bootstrap-Table 遇到的问题
最近用bootstrap-Table插件,遇到的问题记录下: 1.如何按条件查询时,pageNumber重置为1? $('#btnSub').bind('click', function () { $ ...
- 实例:使用纹理对象创建Sprite对象
精灵类是Sprite,它的类图如下图所示: Sprite类直接继承了Node类,具有Node基本特征.此外,我们还可以看到Sprite类的派生类有:PhysicsSprite和Skin.Physics ...
- 【学习笔记】【C语言】数据
1. 什么是数据 生活中时时刻刻都在跟数据打交道,比如体重数据.血压数据.股价数据等.在我们使用计算机的过程中,会接触到各种各样的数据,有文档数据.图片数据.视频数据,还有聊QQ时产生的文字数据.用迅 ...
- Spring IoC容器的设计——BeanFactory应用场景
1.BeanFactory提供的是最基本的IoC容器的功能,关于这些功能定义,我们可以在接口BeanFatory中看到. 2.BeanFactory接口定义了IoC容器最基本的容器的形式,并且提供了I ...
- ionic2 Navigation实现报错:No component factory found for "MyComponent"
ionic2 写的代码里面,跳转的时候报了一个 No component factory found for "RechargeSucceed" recharge() { let ...
- 3月3日(4) Binary Tree Inorder Traversal
原题: Binary Tree Inorder Traversal 和 3月3日(2) Binary Tree Preorder Traversal 类似,只不过变成中序遍历,把前序遍历的代码拿出来, ...
- C#参数化SQL查询
//写一个存储过程 ALTER PROCEDURE dbo.Infosearch ( @bmid smallint = null, @xm varchar()=null, @xb varchar()= ...
- ADO.NET笔记——存储二进制大对象(BLOB)
相关知识 上传二进制大对象(Binary Large Object)(如图片.视频等)的基本编程步骤是: 在数据库中使用varbinary(MAX).varchar(MAX)或者nvarchar(MA ...