DFS BFS代码
#define maxnum 30
#include<bits_stdc++.h>
int visited[maxnum]={0};
using namespace std;
typedef struct bian//边
{
int mark;//标记是否搜索
int ivex,jvex;//两顶点位置
bian *ilink,*jlink;//指向两顶点的其他边
int info;//信息
} bian,*pbian;
typedef struct dian//点
{
char name;
bian *first;//指向边
} dain;
typedef struct graph//图
{
dian dj[maxnum];
} graph;
typedef struct//队列
{
int base[maxnum];
int f;//front
int r;//rear
}que;
void initq(que &q)//初始化队列
{
q.f=q.r=0;
}
void enq(que &q,int e)//队尾插入
{
q.base[q.r]=e;
q.r=q.r+1;
}
void deq(que &q,int &e)//队头删除
{
e=q.base[q.f];
q.f=q.f+1;
}
int getlc(graph &g,char c,int n)//将顶点信息转化为位置
{
for(int i=0; i<n; i++)
if(c==g.dj[i].name)
return i;
}
void creatgraph(graph &g,int &n)//图的创建
{
int k,m;
cout<<"请输入图顶点个数:"<<endl;
cin>>n;
cout<<endl<<"请输入顶点信息(名称):"<<endl;
for(k=0; k<n; k++)
{
cin>>g.dj[k].name;
g.dj[k].first=NULL;
}
cout<<endl<<"请输入边个数:"<<endl;
cin>>m;
char a,b;
int mark,i,j;
pbian p1,p2;
cout<<endl<<"请输入边关系:"<<endl;
for(k=0; k<m; k++)
{
cin>>a>>b;
i=getlc(g,a,n);
j=getlc(g,b,n);
p1=(pbian)malloc(sizeof(bian));
p1->ivex=i;
p1->jvex=j;
p1->ilink=NULL;
p1->jlink=NULL;
p2=g.dj[i].first;
if(p2==NULL)
g.dj[i].first=p1;
else
{
mark=0;
while(mark==0)
{
if(p2->ivex==i&&p2->ilink==NULL) mark=1;
else if(p2->jvex==i&&p2->jlink==NULL) mark=2;
else if(p2->ivex==i) p2=p2->ilink;
else p2=p2->jlink;
}
if(mark==1) p2->ilink=p1;
else p2->jlink=p1;
}
p2=g.dj[j].first;
if(p2==NULL)
g.dj[j].first=p1;
else
{
mark=0;
while(mark==0)
{
if(p2->ivex==j&&p2->ilink==NULL) mark=1;
else if(p2->jvex==j&&p2->jlink==NULL) mark=2;
else if(p2->ivex==j) p2=p2->ilink;
else p2=p2->jlink;
}
if(mark==1) p2->ilink=p1;
else p2->jlink=p1;
}
}
}
void disp(graph &g,int n)//显示对应关系
{
cout<<"位置 名称"<<endl;
for(int i=0; i<n; i++)
cout<<i<<" "<<g.dj[i].name<<endl;
}
void visit(graph &g,int v)//visit 函数
{
cout<<g.dj[v].name;
visited[v]=1;
}
void dfs(graph &g,int i)//dfs
{
if(visited[i]==0)
visit(g,i);
bian *p;
p=g.dj[i].first;
if(p==NULL)return ;
else
{
int m=0;
while(m==0)
{
if(p->ivex==i)
{
if(visited[p->jvex]==0)
{
dfs(g,p->jvex);
}
if(p->ilink==NULL)m=1;
else p=p->ilink;
}
else
{
if(visited[p->ivex]==0)
{
dfs(g,p->ivex);
}
if(p->jlink==NULL)m=1;
else p=p->jlink;
}
}//while
}//else
}
void bfs(graph &g)//bfs
{
int i,u;
bian *t;
cout<<"请输入开始遍历的点:"<<endl;
cin>>i;
que q;//队列q
initq(q);
if(visited[i]==0)
{
visit(g,i);
enq(q,i);
}
while(q.f!=q.r)//队不空
{
deq(q,u);
t=g.dj[u].first;
if(t==NULL)return;
int m=0;
while(m==0)
{
if(t->ivex==u)
{
if(visited[t->jvex]==0)
{
visit(g,t->jvex);
enq(q,t->jvex);
}
if(t->ilink==NULL)m=1;
else t=t->ilink;
}
else
{
if(visited[t->ivex]==0)
{
visit(g,t->ivex);
enq(q,t->ivex);
}
if(t->jlink==NULL)m=1;
else t=t->jlink;
}
}//while
}//while
}
void clearr()
{
for(int i=0;i<maxnum;i++)
{
visited[i]=0;
}
}
int main()
{
graph g;
int t=0;
int n;
creatgraph(g,n);
disp(g,n);
while(t!=3)
{
cout<<endl<<"请选择遍历方式(1:DFS,2:BFS,3:QUIT):"<<endl;
cin>>t;
if(t==1)
{
dfs(g,0);
clearr();
}
else if(t==2)
{
bfs(g);
clearr();
}
else if(t==3)
break;
}
return 0;
}
DFS BFS代码的更多相关文章
- ID(dfs+bfs)-hdu-4127-Flood-it!
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=4127 题目意思: 给n*n的方格,每个格子有一种颜色(0~5),每次可以选择一种颜色,使得和左上角相 ...
- 牛客小白月赛6C-桃花(DFS/BFS求树的直径)
链接:https://www.nowcoder.com/acm/contest/136/C 来源:牛客网 桃花 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 262144K,其他语言 ...
- POJ 3083 -- Children of the Candy Corn(DFS+BFS)TLE
POJ 3083 -- Children of the Candy Corn(DFS+BFS) 题意: 给定一个迷宫,S是起点,E是终点,#是墙不可走,.可以走 1)先输出左转优先时,从S到E的步数 ...
- [LeetCode]695. 岛屿的最大面积(DFS/BFS)、200. 岛屿数量(DFS/BFS待做/并差集待做)
695. 岛屿的最大面积 题目 给定一个包含了一些 0 和 1的非空二维数组 grid , 一个 岛屿 是由四个方向 (水平或垂直) 的 1 (代表土地) 构成的组合.你可以假设二维矩阵的四个边缘都被 ...
- DFS/BFS+思维 HDOJ 5325 Crazy Bobo
题目传送门 /* 题意:给一个树,节点上有权值,问最多能找出多少个点满足在树上是连通的并且按照权值排序后相邻的点 在树上的路径权值都小于这两个点 DFS/BFS+思维:按照权值的大小,从小的到大的连有 ...
- 【DFS/BFS】NYOJ-58-最少步数(迷宫最短路径问题)
[题目链接:NYOJ-58] 经典的搜索问题,想必这题用广搜的会比较多,所以我首先使的也是广搜,但其实深搜同样也是可以的. 不考虑剪枝的话,两种方法实践消耗相同,但是深搜相比广搜内存低一点. 我想,因 ...
- [LeetCode] 130. Surrounded Regions_Medium tag: DFS/BFS
Given a 2D board containing 'X' and 'O' (the letter O), capture all regions surrounded by 'X'. A reg ...
- HDU 4771 (DFS+BFS)
Problem Description Harry Potter has some precious. For example, his invisible robe, his wand and hi ...
- DFS/BFS视频讲解
视频链接:https://www.bilibili.com/video/av12019553?share_medium=android&share_source=qq&bbid=XZ7 ...
随机推荐
- 自动化测试之旅--selenium+python--001
在学习selenium之前,首先感谢网络上的虫师和乙醇老师,或许他们并不知道我这个菜鸟的存在,但是我仍然要感谢他们,因为在学习的路上拜读了许多他们的博客和文章,对于我来说有着很重要的意义,因此在学习之 ...
- django 中间件记录所有请求及请求执行时间
class LoggingMiddleware(object): def process_request(self, request): request.start_time = time.time( ...
- tomcat端口冲突解决 Address already in use: JVM_Bind <null>:8080
java.net.BindException: Address already in use: JVM_Bind <null>:8080 Caused by: java.net.BindE ...
- 网站Http升级至Https(基于Tomcat)
由于之前一直忙于服创比赛,然后就导致好久没写博客了. 现在服创结束也有十来天了,感觉不写点什么就对不起自己了. 于是乎,就写写将网站从http升级到https的过程吧. 首先域名和服务器自然是必须的, ...
- Win7 开机启动
1.注册表里面写代码,设置程序以开机启动; 但这样会需要管理员权限,添加程序以管理员权限启动后,又无法直接进入到软件启动界面,UAC控制 代码一: /// <summary> /// 设置 ...
- 点击checkbox全选,其它被选中,再点击取消
<input type="checkbox" value="" id="checkall" name="" siz ...
- nodejs中cookie、session的使用
因为http会话的无状态性,为了标记用户的登录状态,便出现了cookie.cookie分为很多种,有普通cookie.签名cookie.json cookie等,这里主要记录下在express应用中如 ...
- mac os下载安装jmeter
一.简介 jmeter是属于apache的一个开源产品,纯Java应用.最初用来进行功能测试,而后又扩展了更多的测试功能. 二.下载 进入apache的jmeter下载页:http://jmeter. ...
- Java---工欲善其事必先利其器(准备篇)
Java API 1.7链接:http://pan.baidu.com/s/1cKUaKY 密码:116m Eclispse链接:http://pan.baidu.com/s/1mh6MoL6 密码: ...
- css3打包后自动追加前缀插件:autoprefixer
用vue-cli构建的项目脚手架已经帮你把autoprefixer的配置做好了,自己不需要做什么改动就会自动加前缀: 下面一起看看涉及到autoprefixer这个插件的一些配置: 1,postcss ...