数据结构上机实验dfs&&bfs遍历图
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<queue>
#include<stack>
#include<algorithm>
#define MAX 1000
using namespace std;
int head[MAX],ans;
int vis[MAX],viss[MAX];
int map[MAX],ant;
queue<int>q;
struct node
{
int u,v,next;
}edge[MAX];
void init()
{
memset(head,-1,sizeof(head));
ans=0;
}
void add(int u,int v)
{
edge[ans].u=u;
edge[ans].v=v;
edge[ans].next=head[u];
head[u]=ans++;
}
void bfs(int beg)
{
int i,j;
vis[beg]=1;
q.push(beg);
printf("%d ",beg);
while(!q.empty())
{
int u=q.front();
q.pop();
for(i=head[u];i!=-1;i=edge[i].next)
{
int v=edge[i].v;
if(!vis[v])
{
printf("%d ",v);
vis[v]=1;
q.push(v);
}
}
}
printf("\n");
}
void dfs(int beg)
{
int i,j;
vis[beg]=1;
if(!viss[beg])
{
map[ant++]=beg;
viss[beg]=1;
}
for(i=head[beg];i!=-1;i=edge[i].next)
{
int v=edge[i].v;
if(!vis[v])
{
if(!viss[v])
{
map[ant++]=v;
viss[v]=1;
}
vis[v]=1;
dfs(v);
vis[v]=0;
}
}
}
int main()
{
int n,m,j,i,k,a,b;
int start;
while(1)
{
init();
printf("请输入你要创建的图的顶点连线的对数\n");
scanf("%d",&n);
printf("请输入每对顶点的值\n");
while(n--)
{
scanf("%d%d",&a,&b);
add(a,b);
add(b,a);
}
while(1)
{
printf("请输入你要开始广度优先遍历的起点,如果你想要退出进行其他操作请输入-1\n");
memset(vis,0,sizeof(vis));
while(!q.empty())
q.pop();
scanf("%d",&start);
if(start==-1)
break;
bfs(start);
}
while(1)
{
printf("请输入你要开始深度优先遍历的起点,如果你想要退出进行其他操作请输入-1\n");
memset(vis,0,sizeof(vis));
memset(viss,0,sizeof(viss));
while(!q.empty())
q.pop();
scanf("%d",&start);
if(start==-1)
break;
ant=0;
dfs(start);
for(i=0;i<ant;i++)
{
if(map[i]!=map[i+1])
printf("%d ",map[i]);
}
printf("\n");
}
}
return 0;
}
数据结构上机实验dfs&&bfs遍历图的更多相关文章
- 合肥工业大学数据结构上机实验代码与实验报告(全)github地址
我已经将这个学期的所有数据结构上机实验的代码与报告上传到github上了,一直都有这个想法,但没抽出时间来学习git.经过上周简单的练习后,我已经基本学会运营自己的代码仓库了.所有代码都是C++写的类 ...
- 列出连通集(DFS及BFS遍历图) -- 数据结构
题目: 7-1 列出连通集 (30 分) 给定一个有N个顶点和E条边的无向图,请用DFS和BFS分别列出其所有的连通集.假设顶点从0到N−1编号.进行搜索时,假设我们总是从编号最小的顶点出发,按编号递 ...
- 图的bfs遍历模板(邻接矩阵存储和邻接表存储)
bfs遍历图模板伪代码: bfs(u){ //遍历u所在的连通块 queue q; //将u入队 inq[u] = true; while (q非空){ //取出q的队首元素u进行访问 for (从u ...
- 数据结构(三十二)图的遍历(DFS、BFS)
图的遍历和树的遍历类似.图的遍历是指从图中的某个顶点出发,对图中的所有顶点访问且仅访问一次的过程.通常有两种遍历次序方案:深度优先遍历和广度优先遍历. 一.深度优先遍历 深度优先遍历(Depth_Fi ...
- 图的两种遍历:DFS&BFS
DFS和BFS在图中的应用: 图连通性判定:路径的存在性:图中是否存在环:求图的最小生成树:求图的关键路径:求图的拓扑排序. DFS:简单的说,先一直往深处走,直到不能再深了,再从另一条路开始往深处走 ...
- 算法学习记录-图(DFS BFS)
图: 目录: 1.概念 2.邻接矩阵(结构,深度/广度优先遍历) 3.邻接表(结构,深度/广度优先遍历) 图的基本概念: 数据元素:顶点 1.有穷非空(必须有顶点) 2.顶点之间为边(可空) 无向图: ...
- 数据结构基础(21) --DFS与BFS
DFS 从图中某个顶点V0 出发,访问此顶点,然后依次从V0的各个未被访问的邻接点出发深度优先搜索遍历图,直至图中所有和V0有路径相通的顶点都被访问到(使用堆栈). //使用邻接矩阵存储的无向图的深度 ...
- 《数据结构》C++代码 BFS与DFS
BFS,广度优先搜索,一层一层去遍历图,故称广度优先.实现方式:队列. DFS,深度优先搜索,撞墙才回头的遍历,称为深度优先.实现方式:递归(栈). 这两种遍历方式,是访问图的基本方式.如果拿树做对比 ...
- 数据结构之 图论---基于邻接矩阵的广度优先搜索遍历(输出bfs遍历序列)
数据结构实验图论一:基于邻接矩阵的广度优先搜索遍历 Time Limit: 1000MS Memory limit: 65536K 题目描述 给定一个无向连通图,顶点编号从0到n-1,用广度优先搜索( ...
随机推荐
- JS 封装类
function HighchartsObj(id, type) { var that = this; this.options = { chart : { renderTo : id, type : ...
- js 实现list类
js中没有list类,可以使用Array来实现list类 (function(win) { var ArrayList = function() { this.datas = []; }; var p ...
- MyEclipse下查看Java API帮助文档
每次重装JDK或者升级JDK时,都会忘了如何使MyEclipse关联帮助文档.然后,再花十几分钟重新google搜索,麻烦! 首先下载Javadoc api帮助文档,google搜一下就行了. MyE ...
- 垃圾收集器GC的种类
堆内存的结构:
- redmine一键安装包下载链接
windows版本一键安装包:<bitnami-redmine-3.1.1-1-windows-installer.exe> 下载地址:http://pan.baidu.com/s/19D ...
- Winform 数据验证
http://blog.scosby.com/post/2010/02/11/Validation-in-Windows-Forms.aspx 总结:1. CancelEventArgs e ,调用e ...
- MapReduce编程系列 — 4:排序
1.项目名称: 2.程序代码: package com.sort; import java.io.IOException; import org.apache.hadoop.conf.Configur ...
- CruiseControl.net
CruiseControl.net 使用CruiseControl.NET进行自动化构建总结 http://blog.csdn.net/chenbin520/article/details/10112 ...
- mysql系列命令解释
mysqld - the MySQL server mysql - the MySQL command-line tool mysqlaccess - client for checking acce ...
- bzoj4028
一眼分块题…… 分块,维护每个块的总的gcd和xor和 先思考我们应该怎么查询,考虑到gcd是一个神奇的东西,因为它最多变化logX次 于是我们从前往后扫描每个块,如果一个块内总的gcd是当前扫描的前 ...