邻结矩阵的建立和 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;
else
return 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_JUDGE
freopen("input.txt", "r", stdin);
#endif Graph g;
g = creat_graph();
DFS_travers(g);
printf("\n");
BFS_travers(g); return 0;
}
邻结矩阵的建立和 BFS,DFS;;的更多相关文章
- POJ 2227 The Wedding Juicer (优先级队列+bfs+dfs)
思路描述来自:http://hi.baidu.com/perfectcai_/item/701f2efa460cedcb0dd1c820也可以参考黑书P89的积水. 题意:Farmer John有一个 ...
- Collect More Jewels(hdu1044)(BFS+DFS)
Collect More Jewels Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Othe ...
- Cleaning Robot (bfs+dfs)
Cleaning Robot (bfs+dfs) Here, we want to solve path planning for a mobile robot cleaning a rectangu ...
- LeetCode:BFS/DFS
BFS/DFS 在树专题和回溯算法中其实已经涉及到了BFS和DFS算法,这里单独提出再进一步学习一下 BFS 广度优先遍历 Breadth-First-Search 这部分的内容也主要是学习了labu ...
- 数据结构学习笔记05图 (邻接矩阵 邻接表-->BFS DFS、最短路径)
数据结构之图 图(Graph) 包含 一组顶点:通常用V (Vertex) 表示顶点集合 一组边:通常用E (Edge) 表示边的集合 边是顶点对:(v, w) ∈E ,其中v, w ∈ V 有向边& ...
- 图的基本遍历算法的实现(BFS & DFS)复习
#include <stdio.h> #define INF 32767 typedef struct MGraph{ ]; ][]; int ver_num, edge_num; }MG ...
- 图的创建和遍历(BFS/DFS)
图的表示方法主要有邻接矩阵和邻接表.其中邻接表最为常用,因此这里便以邻接表为例介绍一下图的创建及遍历方法. 创建图用到的结构有两种:顶点及弧 struct ArcNode { int vertexIn ...
- POJ3083 Children of the Candy Corn(Bfs + Dfs)
题意:给一个w*h的迷宫,其中矩阵里面 S是起点,E是终点,“#”不可走,“.”可走,而且,S.E都只会在边界并且,不会在角落,例如(0,0),输出的话,每组数据就输出三个整数,第一个整数,指的是,以 ...
- 搜索入门_简单搜索bfs dfs大杂烩
dfs题大杂烩 棋盘问题 POJ - 1321 和经典的八皇后问题一样. 给你一个棋盘,只有#区域可以放棋子,同时同一行和同一列只能有一个棋子. 问你放k个棋子有多少种方案. 很明显,这是搜索题. ...
随机推荐
- php数据过滤函数与方法示例【转载】
1.php提交数据过滤的基本原则 1)提交变量进数据库时,我们必须使用addslashes()进行过滤,像我们的注入问题,一个addslashes()也就搞定了.其实在涉及到变量取值时,intval( ...
- ASP.NET MVC3 301永久重定向实现程序
使用 ASP.NET 又喜欢跟进新技术的朋友可能已经知道,在 ASP.NET 4.0 中增加了 Response.RedirectPermanent() 方法来实现永久重定向,方法的作用在注释中解释的 ...
- iOS - SWift3 & XCode8
1. 使用资源文件夹导入并管理图片素材 /* *资源文件夹可以方便您进行图片管理,在读取图片时,不需要加上图片名的后缀.同时还可以提高软件的安全性,它会讲图片都加密压缩, *并保存到 Assets ...
- Objective-C设计模式——抽象工厂模式Abstract Factory(对象创建)
抽象工厂模式 理解了工厂方法模式,其实抽象工厂和工厂方法模式有很多的相似之处.抽象工厂同样是分离客户端对象的创建和逻辑代码的,但是抽象工厂往往是产生一组数据而不单单是产生一个产品. 抽象工厂提供一个创 ...
- 前台JS(Jquery)调用后台方法 无刷新级联菜单示例
前台用AJAX直接调用后台方法,老有人发帖提问,没事做个示例 下面是做的一个前台用JQUERY,AJAX调用后台方法做的无刷新级联菜单 http://www.dtan.so CasMenu.aspx页 ...
- Python3 - 时间处理与定时任务
1.计算明天和昨天的日期 #! /usr/bin/env python #coding=utf-8 # 获取今天.昨天和明天的日期 # 引入datetime模块 import datetime #计算 ...
- Engine许可初始化 - gis开发初步
当需要对SDE中的要素类和要素数据集(矢量和栅格)进行编辑时,例如在调用IFeatureDataset的CreateFeatureClass方法时,报错提示: The application is n ...
- ROS
1 SSH 为什么我用 ssh 用户名 就不行,用 ssh xxx.xxx.xxx.xxx -l 用户名 就可以了呢 2 SCP 传送文件到另一个IP 用法: scp xxx root@xx.x ...
- 新做的H5页面(具体应该说是百分比页面)
主要代码 <div class="top" id="headTab"> <div id="photo"><a ...
- Hbase 0.95.2介绍及下载地址
HBase是一个分布式的.面向列的开源数据库,该技术来源于Google论文“Bigtable:一个结构化数据的分布式存储系统”.就像Bigtable利用了Google文件系统(File System) ...