Graph——bfs,dfs
做个记录:
BFS——queue实现
#include<iostream>
#include<cstring>
#include<queue>
using namespace std;#define N 100struct Graph
{int vexnum;int arcnum;char vexs[N];int arcs[N][N];
};int Loc_vexs(Graph G, char a)
{for(int i=1;i<=G.vexnum;i++){if(G.vexs[i] == a){return i;}}
}void Input(Graph &G)
{cin>>G.vexnum;cin>>G.arcnum;for(int i=1;i<=G.vexnum;i++){cin>>G.vexs[i];}for(int i=1;i<=G.vexnum;i++){for(int j=1;j<=G.vexnum;j++){G.arcs[i][j] = 0;}}for(int i=1;i<=G.arcnum;i++){char a,b;cin>>a>>b;int x = Loc_vexs(G,a);int y = Loc_vexs(G,b);G.arcs[x][y] = 1;}
}void Bfs(Graph G)
{int v[N];memset(v,0,sizeof(v));queue<int> q;q.push(1);v[1] = 1;cout<<G.vexs[1]<<" ";while(!q.empty()){int u = q.front();for(int i=1;i<=G.vexnum;i++){if(!v[i] && G.arcs[u][i]==1){cout<<G.vexs[i]<<" ";v[i] = 1;q.push(i);}}q.pop();}cout<<endl;
}int main()
{Graph G;Input(G);Bfs(G);return 0;
}
bfs递归还未实现
DFS——stack实现
#include<iostream>
#include<cstring>
#include<stack>
using namespace std;#define N 100struct Graph
{int vexnum;int arcnum;char vexs[N];int arcs[N][N];
};int Loc_vexs(Graph G, char a)
{for(int i=1;i<=G.vexnum;i++){if(G.vexs[i] == a){return i;}}
}void Input(Graph &G)
{cin>>G.vexnum;cin>>G.arcnum;for(int i=1;i<=G.vexnum;i++){cin>>G.vexs[i];}for(int i=1;i<=G.vexnum;i++){for(int j=1;j<=G.vexnum;j++){G.arcs[i][j] = 0;}}for(int i=1;i<=G.arcnum;i++){char a,b;cin>>a>>b;int x = Loc_vexs(G,a);int y = Loc_vexs(G,b);G.arcs[x][y] = 1;}
}void Dfs(Graph G)
{int v[N];memset(v,0,sizeof(v));stack<int> s;s.push(1);v[1] = 1;cout<<G.vexs[1]<<" ";while(!s.empty()){int u = s.top();int flag = 0;for(int i=1;i<=G.vexnum;i++){if(!v[i] && G.arcs[u][i]==1){s.push(i);cout<<G.vexs[i]<<" ";v[i] = 1; flag = 1; break; // 仅此于bfs不同}}if(flag==0) // 标记 u 此时为最深处 ,开始回溯 {s.pop();}}
}int main()
{Graph G;Input(G);Dfs(G);return 0;
}
DFS——递归实现
#include<iostream>
#include<cstring>
using namespace std;#define N 100struct Graph
{int vexnum;int arcnum;char vexs[N];int arcs[N][N];
};int Loc_vexs(Graph G, char a)
{for(int i=1;i<=G.vexnum;i++){if(G.vexs[i] == a){return i;}}
}void Input(Graph &G)
{cin>>G.vexnum;cin>>G.arcnum;for(int i=1;i<=G.vexnum;i++){cin>>G.vexs[i];}for(int i=1;i<=G.vexnum;i++){for(int j=1;j<=G.vexnum;j++){G.arcs[i][j] = 0;}}for(int i=1;i<=G.arcnum;i++){char a,b;cin>>a>>b;int x = Loc_vexs(G,a);int y = Loc_vexs(G,b);G.arcs[x][y] = 1;}
}int v[N];void Dfs(Graph G,int x)
{cout<<G.vexs[x]<<" ";v[x] =1;for(int i=1;i<=G.vexnum;i++){if(!v[i] && G.arcs[x][i]==1){Dfs(G,i);}}
} int main()
{Graph G;Input(G);memset(v,0,sizeof(v));Dfs(G,1); // 假设从vexs[1] 开始 return 0;
}
Graph——bfs,dfs相关推荐
- 邻结矩阵的建立和 BFS,DFS;;
邻结矩阵比较简单,, 它的BFS,DFS, 两种遍历也比较简单,一个用队列, 一个用数组即可!!!但是邻接矩阵极其浪费空间,尤其是当它是一个稀疏矩阵的时候!!!-------------------- ...
- [Leetcode][第785题][JAVA][判断二分图][BFS][DFS]
[问题描述][中等] [解答思路] 1. DFS 深度优先遍历 时间复杂度:O(N+M) 空间复杂度:O(N) class Solution {private static final int UNC ...
- 深度搜索 java_java实现的深度搜索与广度搜索算法BFS,DFS以及几种最短路径算法...
java实现的深度搜索与广度搜索算法BFS,DFS以及几种最短路径算法 public class City { String name; int id; static int idCounter = ...
- 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, 用于表述从节点与节点直接迁移的代价. 而图 ...
- 【八数码问题】基于状态空间法的知识表示与状态搜索:无信息搜索(BFS/DFS) 启发式搜索(A*)
前言 一.问题引入 二.状态空间法 1. 知识及其表示 2. 状态空间法定义 3. 问题求解 三.基于状态空间搜索法解决八数码问题 1. 八数码问题的知识表示 2. 状态空间图搜索 1. 无信息搜索 ...
- bfs dfs 搜索入门模板题
bfs & dfs 题目链接:https://vjudge.net/contest/404511 1.最短路(bfs) (1)一维最短路 D - Catch That Cow 题目大意: 在一 ...
- 动态规划+BFS+DFS+回溯+红黑树+排序+链表+位运算(B站优质学习资源链接,后续会继续更新)
动态规划 正月点灯笼(UP主) 个人主页 https://space.bilibili.com/24014925/channel/detail?cid=12580 动态规划第一讲 https://ww ...
- 【python3数据结构】图Graph及DFS(深度优先搜索)BFS(广度优先搜索)
Graph 和 Vertex 构建基于邻接列表: # -*- coding: utf-8 -*- # @Date : 2019/12/1 # @File : AdjListGraph.pyimport ...
最新文章
- String.fromCharCode()
- 院士王坚:坚持你相信的事,相信你坚持的事
- Dell服务器相关操作
- CocoaPods 安装与使用教程
- 802.11n兼容a/b/g问题(Legacy mode,Mixed mode,Greenfield mode)
- Android开发之PCM录音实时播放的实现方法 | 边录音边播放 |PCM录音播放无延迟 | 录音无杂音 | 录音无噪音
- linux系统下ntp网络时钟服务器(NTP服务器)的搭建和使用
- bat文件如何将一段文字放入剪切板?
- 在vSphere Client使用模板部署虚拟机 系统硬盘空间扩展
- OCR 脱机手写汉字识别与印刷汉字识别
- MSP430项目设计:2020年TI杯大学生电子设计竞赛 坡道行驶电动小车(C题)循迹小车(分享项目展示视频与源码)
- lstm 预测诗歌_预测诗歌运动
- 《Windows》Windows桌面设置
- 怎么操作信任另一台计算机,电脑上怎么设置信任软件
- 恒峰祥可信讲述拼多多电商店铺推广和商品推广有什么不同
- php 实现保留两位小数
- 2022年ISO27001资质认证补贴政策汇总
- 8421.5421.2421.余3码的区别
- 微型计算机原理_课后答案,微机原理课后习题标准答案
- php 时间随机数,PHP——生成随机数和日期时间
热门文章
- 送给队友的一个汉堡包
- android 实现应用程序后台运行的说明
- VMware vSphere client 5.1登录出现这个错误:客户端无法向服务器发送完整请求
- 泛型方法,java map按照value值来比较大小并且返回最终结果
- 西班牙夺得欧洲杯给IT业的十条启示
- H3C模拟器simware搭建总结
- php有的图片显示不出来,图片显示不出来,但是数据库里有显示
- python所有第三方库_自动更新Python所有第三方库
- flask与js交互的示例代码_用Python做交互式图形
- hbase shell删除一行_HBase安装phoenix实战shell操作