邻结矩阵的建立和 BFS,DFS;;
邻结矩阵比较简单,, 它的BFS,DFS, 两种遍历也比较简单,一个用队列, 一个用数组即可!!!但是邻接矩阵极其浪费空间,尤其是当它是一个稀疏矩阵的时候!!!---------------------------------------------------------------------------------------------------------------------------------------//邻接矩阵的建立和 其BFS, DFS, 遍历
#include <cstdio>
#include <cstdlib>
//#define _OJ_int visit[100];
int cnt = 0;
typedef struct Graph1
{int nv;int ne;int a[100][100];
} Graph1, *Graph; //建立一个图含顶点, 边, 和邻接矩阵Graph
creat_graph(void)
{Graph g;int i, j;int v1, v2;g = (Graph) malloc (sizeof(Graph1));scanf("%d %d", &g->nv, &g->ne);for(i = 0;i < g->nv; i++) {for(j = 0;j < g->nv; j++) {g->a[i][j] = 0;}} //对邻结矩阵赋初始值for(i = 0;i < g->ne; i++) {scanf("%d %d", &v1, &v2);g->a[v1][v2] = 1;g->a[v2][v1] = 1;} //建立一个无向矩阵return g;
}void
DFS(Graph g, int i)
{int j;// lif(cnt == g->nv - 1)// printf("%d\n", i);// else { //此地有一个小技巧就是判断什么时候结束?// printf("%d ", i); //用一个全局变量cnt 由于每一个点遍历一次// cnt++; cnt == g->nv - 1 时结束;用此处理最后一个不要空格和换行// }printf("%d ", i);visit[i] = 1;for(j = 0;j < g->nv; j++) {if(g->a[i][j] == 1 && visit[j] == 0)DFS(g, j);}
}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 *elem;
} Queue1, *Queue;Queue
creat_Queue(void)
{Queue q;q = (Queue) malloc (sizeof(Queue1));q->elem = (int*) malloc (100 * sizeof(int));q->base = q->top = 0;return q;
}int
isempty(Queue q)
{if(q->base == q->top)return 1;elsereturn 0;
}void
Enqueue(Queue q, int data)
{q->elem[q->top++] = data;
}int
Dequeue(Queue q)
{return q->elem[q->base++];
}void
BFS(Graph g, int v)
{int i, j;Queue q;q = creat_Queue();printf("%d ", v);visit[v] = 1;Enqueue(q, v);while (isempty(q) != 1) {i = Dequeue(q);for(j = 0;j < g->nv; j++) {if(g->a[i][j] && visit[j] == 0 ) {printf("%d ", j); //把整排先全都遍历完,在遍历其它的visit[j] = 1; //每次先遍历在入队Enqueue(q, j);}}}}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_JUDGEfreopen("input.txt", "r", stdin);
#endifGraph g;g = creat_graph();DFS_travers(g);printf("\n");BFS_travers(g);return 0;
}
转载于:https://www.cnblogs.com/airfand/p/5020420.html
邻结矩阵的建立和 BFS,DFS;;相关推荐
- 【八数码问题】基于状态空间法的知识表示与状态搜索:无信息搜索(BFS/DFS) 启发式搜索(A*)
前言 一.问题引入 二.状态空间法 1. 知识及其表示 2. 状态空间法定义 3. 问题求解 三.基于状态空间搜索法解决八数码问题 1. 八数码问题的知识表示 2. 状态空间图搜索 1. 无信息搜索 ...
- [Leetcode][第785题][JAVA][判断二分图][BFS][DFS]
[问题描述][中等] [解答思路] 1. DFS 深度优先遍历 时间复杂度:O(N+M) 空间复杂度:O(N) class Solution {private static final int UNC ...
- LeetCode 1263. 推箱子(BFS+DFS / 自定义哈希set)
文章目录 1. 题目 2. 解题 2.1 超时解 2.2 BFS + DFS 1. 题目 「推箱子」是一款风靡全球的益智小游戏,玩家需要将箱子推到仓库中的目标位置. 游戏地图用大小为 n * m 的网 ...
- LeetCode 1034. 边框着色(BFS/DFS)
文章目录 1. 题目 2. 解题 2.1 BFS 2.2 DFS 1. 题目 给出一个二维整数网格 grid,网格中的每个值表示该位置处的网格块的颜色. 只有当两个网格块的颜色相同,而且在四个方向中任 ...
- 全局路径规划:图搜索算法介绍1(BFS/DFS)
对于全局路径规划的设计,我们先要了解什么是图搜索,在此之前,要先知道什么是图: 可以看到,图有很多种,有无向图,有向图,节点之间还可以有不同的weight, 用于表述从节点与节点直接迁移的代价. 而图 ...
- 深度搜索 java_java实现的深度搜索与广度搜索算法BFS,DFS以及几种最短路径算法...
java实现的深度搜索与广度搜索算法BFS,DFS以及几种最短路径算法 public class City { String name; int id; static int idCounter = ...
- 中南大学MATLAB变量专题/矩阵的建立1-3/4
预定义变量 系统本定义的变量 ans默认赋值变量 i和j代表虚数单位 矩阵的建立 1.利用直接输入法建立矩阵 将矩阵的元素用中括号括起来,按矩阵行的输入顺序输入各元素,同一行的各元素之间用逗号或空格分 ...
- MATLAB矩阵的建立
目录 1.前言 2.直接输入法建立矩阵 2.利用冒号表达式建立一个向量 3.linspace函数产生行向量 4.复数矩阵的建立 5.寄语 1.前言 本系列博客均以<<MATLAB程序设计教 ...
- MATLAB矩阵的建立与访问
1.普通矩阵的建立 不管是任何矩阵(向量),都可以直接按照行方式输入每个元素:同一行的元素用逗号或者用空格符来分割,且空格个数不限:不同的行用分号分割.所有的元素都处于一方括号[]内.比如: > ...
最新文章
- 用于时序动作提名生成任务,爱奇艺提出BC-GNN图神经网络 | ECCV 2020
- 离开当前屏幕的判断方法_掌中宝系列之EMG电动门调整方法
- 如何在PHP中删除字符串中的所有空格? [重复]
- nginx四层端口转发
- HDU 4630 No Pain No Game 树状数组+离线操作
- 【调参实战】那些优化方法的性能究竟如何,各自的参数应该如何选择?
- UVA - 514:Rails
- python 调用gpu算力_数据科学家需要算力,GPU 如何实现?-控制器/处理器-与非网...
- Linux系统配置及服务管理_第03章用户管理
- 大容量nc文件解析_分布式文件系统浅谈
- 前端使用的字体中英文对照
- 领导越讲人情,团队越不行?
- Geometric tampering estimation by means of a sift-based forensic analysis论文阅读
- MacOS Big Sur Beta 测评|使用体验|有哪些BUG?|如何安装?|实际体验如何?|WWDC2020
- 利用springMVC实现购物车结算功能
- 论文阅读——(邬江兴院士) 网络空间内生安全综述 Cyberspace Endogenous Safety and Security
- 冬天买什么绒的四件套好用
- 解决input框上下偏移问题
- java车次信息_java实现根据起点终点和日期查询去哪儿网的火车车次和火车站点信息...
- Libra (介绍) 建立一个简单的全球货币和金融基础 (1)
热门文章
- java -cp 引用多个包_Java -cp 命令行引用多个jar包的简单写法(Windows、Linux)
- c++ class struct同名_相对于C语言,C++对struct做了非常多的扩充,功能更全面了
- vue-cli@2的原理解析
- CSAPP:第十一章 网络编程
- 【转】30种MySQL索引优化的方法
- [PAT乙级]数字分类 (20)
- tomcat,eclipse,sts绿色运行
- iOS屏幕尺寸和分辨率了解
- 每天一个JavaScript实例-动态省份选择城市
- IE(=8)版本不支持getElementsByClassName()