写在前面:本博客为本人原创,严禁任何形式的转载!本博客只允许放在博客园(.cnblogs.com),如果您在其他网站看到这篇博文,请通过下面这个唯一的合法链接转到原文!

本博客全网唯一合法URL:https://www.cnblogs.com/acm-icpcer/p/10458956.html

算法思想使用的是殷人昆《数据结构(基于面向对象和C++)》第二版P364页的程序8.9&P366程序8.10

#include<iostream>
#include<cstdlib>
#include<cstring>
using namespace std;
const long M=; struct node
{
int data;
struct node* next;
}; class Q
{
private:
node *head,*rear;
public:
Q()//this actually ruled that we do not use first node
{
head=new node();
rear=head;
}
void add(int a)
{
node *t=new node();
t->data=a;
rear->next=t;
rear=rear->next;
}
int remove()
{
node *t=head->next;
int result=t->data;
head->next=t->next;
delete t;
return result;
} node* gethead()
{
return head;
} bool isempty()
{
if(head->next==NULL)
return true;
else return false;
}
}; class G
{
private:
int map[M][M];
int visited[M];
int m;
public:
G()
{
cin>>m;
reset();
clean();
build();
} void reset()
{
memset(map,,sizeof(map));
cout<<"reset over!"<<endl;
} void clean()
{
memset(visited,,sizeof(visited));
cout<<"clean over!"<<endl;
} void build()
{
for(int i=;i<m;i++)
for(int j=;j<m;j++)
scanf("%d",&map[i][j]);
} void display()
{
cout<<"displaying:"<<endl;
for(int i=;i<m;i++)
{
for(int j=;j<m;j++)
cout<<map[i][j];
cout<<endl;
}
} int getfirstedge(int v)
{
if(v>m||v<) return -;
int i=;
while(map[v][i]<=&&i<m) i++;
if(i>m||i<) return -;
return i;
} int getnextedge(int v,int w)
{
int i=w+;
if(v>m||v<||i>m||i<) return -;
while(map[v][i]<=&&i<m) i++;
if(i>m||i<) return -;
return i;
}
/*
void dfs(int i,int j)
{
if(i>m||j>m||i<0||j<0||visited[i][j])
return; ++visited[i][j]; if(map[i][j]>0)
cout<<"node->"<<i<<":"<<map[i][j]; dfs(i-1,j);
dfs(i,j-1);
dfs(i+1,j);
dfs(i,j+1);
}
*/ void dfs(int v)//v represents a node
{
cout<<v;
visited[v]=;
int w=this->getfirstedge(v);
while(w>=&&w<m)
{
if(visited[w]!=)
dfs(w);
w=this->getnextedge(v,w);
}
} void bfs(int v)
{
Q *q=new Q();
cout<<v;
visited[v]=;
q->add(v);
while(!q->isempty())
{
int loc=q->remove();
int w=this->getfirstedge(loc);
while(w>=&&w<m)
{
if(visited[w]==false)
{
cout<<w;
visited[w]=;
q->add(w);
}
w=this->getnextedge(loc,w);
}
} } }; int main()
{
G *obj1=new G();
obj1->display();
/*
cout<<obj1->getfirstedge(1)<<endl;
cout<<obj1->getnextedge(1,obj1->getfirstedge(1))<<endl;
*/
obj1->clean();
cout<<"dfs:"<<endl;
obj1->dfs();
cout<<endl; obj1->clean();
cout<<"bfs:"<<endl;
obj1->bfs();
cout<<endl; return ;
}

代码运行说明:

tz@HZAU

2019/3/2

【C++】基于邻接矩阵的图的深度优先遍历(DFS)和广度优先遍历(BFS)的更多相关文章

  1. 图的深度优先搜索(DFS)和广度优先搜索(BFS)算法

    深度优先(DFS) 深度优先遍历,从初始访问结点出发,我们知道初始访问结点可能有多个邻接结点,深度优先遍历的策略就是首先访问第一个邻接结点,然后再以这个被访问的邻接结点作为初始结点,访问它的第一个邻接 ...

  2. 深度优先搜索DFS和广度优先搜索BFS简单解析(新手向)

    深度优先搜索DFS和广度优先搜索BFS简单解析 与树的遍历类似,图的遍历要求从某一点出发,每个点仅被访问一次,这个过程就是图的遍历.图的遍历常用的有深度优先搜索和广度优先搜索,这两者对于有向图和无向图 ...

  3. 深度优先搜索DFS和广度优先搜索BFS简单解析

    转自:https://www.cnblogs.com/FZfangzheng/p/8529132.html 深度优先搜索DFS和广度优先搜索BFS简单解析 与树的遍历类似,图的遍历要求从某一点出发,每 ...

  4. 图的深度优先遍历(DFS)和广度优先遍历(BFS)

    body, table{font-family: 微软雅黑; font-size: 13.5pt} table{border-collapse: collapse; border: solid gra ...

  5. 图的 储存 深度优先(DFS)广度优先(BFS)遍历

    图遍历的概念: 从图中某顶点出发访遍图中每个顶点,且每个顶点仅访问一次,此过程称为图的遍历(Traversing Graph).图的遍历算法是求解图的连通性问题.拓扑排序和求关键路径等算法的基础.图的 ...

  6. 图的深度优先遍历(DFS)和广度优先遍历(BFS)算法分析

    1. 深度优先遍历 深度优先遍历(Depth First Search)的主要思想是: 1.首先以一个未被访问过的顶点作为起始顶点,沿当前顶点的边走到未访问过的顶点: 2.当没有未访问过的顶点时,则回 ...

  7. 深度优先搜索DFS和广度优先搜索BFS

    DFS简介 深度优先搜索,一般会设置一个数组visited记录每个顶点的访问状态,初始状态图中所有顶点均未被访问,从某个未被访问过的顶点开始按照某个原则一直往深处访问,访问的过程中随时更新数组visi ...

  8. 图的遍历(搜索)算法(深度优先算法DFS和广度优先算法BFS)

    图的遍历的定义: 从图的某个顶点出发访问遍图中所有顶点,且每个顶点仅被访问一次.(连通图与非连通图) 深度优先遍历(DFS): 1.访问指定的起始顶点: 2.若当前访问的顶点的邻接顶点有未被访问的,则 ...

  9. 邻接矩阵实现图的存储,DFS,BFS遍历

    图的遍历一般由两者方式:深度优先搜索(DFS),广度优先搜索(BFS),深度优先就是先访问完最深层次的数据元素,而BFS其实就是层次遍历,每一层每一层的遍历. 1.深度优先搜索(DFS) 我一贯习惯有 ...

随机推荐

  1. JDBC连接MariaDB:数据传输加密

    环境:win7+springboot+mybatis+mariadb 需求说明: 未做安全加固前用wireshark抓包: 可以很明显看到用户名.数据库和 SQL,这种情况是有安全风险的. 1.下载o ...

  2. springboot ****使用经验*******

    目录 1. 返回时间格式化问题 2. springboot 中获取属性 3. SpringBoot中启动是忽略某项检测 4.  启动不开启安全校验 一返回时间格式化问题 在Spring Boot项目中 ...

  3. @Transactional 无效原因

    在controller 上面使用  @Transactional 注解时候发现数据没有回滚,在执行完update 更新语句,事务直接就commit 了, 此时方法尚未执行结束,数据库数据已经更新了. ...

  4. Web Application Vulnerablities

    1. File inclusion berfoe start this caption  i make a conclusion for install third-part as follow I ...

  5. Jmeter性能测试之参数化(二)

    Jmeter参数化主要有3种方式: 1. Add--> Pre Processors--> User Parameters 2. Add--> Config Element--> ...

  6. SQL insert

    INSERT INTO 插入语句 INSERT INTO语句用于在表中插入新记录. 可以用两种方式编写INSERT INTO语句. 第一种方法指定列名和要插入的值: 1 2 INSERT INTO t ...

  7. [原创]iFPGA-Cable FT2232H JTAG & UART调试器

    iFPGA-Cable FT2232H JTAG & UART调试器 [特性] 采用FT2232H,双通道接口: 支持UART: 支持JTAG,Digilent SMT-1,TCK最大时钟频率 ...

  8. 普通用户登陆系统显示 -bash-4.1$

    如题,今天上午用户登陆系统之后显示-bash-4.1$ 造成这样的原因: 与这个用户有关环境变量没了,有关的文件被删除.也就是用户的家目录下面 .bash_profile .bashrc 被删除. 解 ...

  9. 咸鱼入门到放弃6--jsp<一>三指令

    JSP全称是Java Server Pages 它和servle技术一样,都是SUN公司定义的一种用于开发动态web资源的技术.JSP这门技术的最大的特点在于,写jsp就像在写html,但它相比htm ...

  10. BigDecimal类型转换

    djjfbr.setMoney(new BigDecimal(djjfbillrecord.getMoney()));