图以及DFS和BFS
来源:互联网 发布:linux bond配置 编辑:程序博客网 时间:2024/06/03 11:47
图:
struct Edge{ Point start; Point end;};class graph{private: int edge[1000][1000]; Edge edge_set[1000]; int Pnum = 0; int Enum = 0; Point pset[1000];public: graph() { memset(edge, 0, sizeof(edge)); } //增加点 void addpoint(Point a); //增加边 void addedge(int i, int j,int value); //清空点 void clear_pset(); void clear_edge(); //通过向量叉乘符号来进行定义 ,必须严格大于0,在一条线上的也不算left bool toleft(Point a, Point b, Point k); int cross_product(Point a, Point b, Point k); bool in_triangle(Point a, Point b, Point c, Point k); int graham_scan(Point *res); //返回extreme edge的个数 int EE(Point *res); //Jarvis Marching int JM(Point *res); void dijkstra(int start_p,int res[][2]); void floyd(int dist[][1000], int mid[][1000]); void bfs(int start,int *res); void dfs(int start);};
BFS:用一个队列来实现距离越短越先访问
void graph::bfs(int start,int *dis){ queue<int> q; int Pnum = this->Pnum; int visit[1000];//0代表从未访问(white),1代表它的前一个节点已经访问到(gray),2代表已经被访问到(black) memset(visit, 0, sizeof(visit)); q.push(start); dis[start] = 0; while (!q.empty()) { int p_now = q.front(); q.pop(); for (int i = 0; i < Pnum; i++)// { if (p_now == i) continue; if (this->edge[p_now][i] && visit[i] == 0) { q.push(i); visit[i] = 1; if (dis[i] == 0) dis[i] = dis[p_now] + 1;//dis为其前一个节点的距离+1 } } //visit[p_now] = 2; }}
DFS:
//用栈可以实现回溯调用,//1 如果有可能,访问一个领接的未访问的节点,标记它,并把它放入栈中。//2 当不能执行规则 1 时,如果栈不为空,则从栈中弹出一个元素。//3 如果不能执行规则 1 和规则 2 时,则完成了遍历。void graph::dfs(int start){ int Pnum = this->Pnum; int visit[1000]; memset(visit, 0, sizeof(visit)); stack<int> s; s.push(start); int step; int h = 0; cout << start << "h:" << h << endl; while (!s.empty()) { int find = 0; int p = s.top(); for (int i = 0; i < Pnum; i++) { if (!visit[i] && edge[p][i]) { find = 1; s.push(i); visit[i] = 1; cout << i << " "; h++; cout << "h:" << h << endl; //break;此处不该break,应该先把其相邻的节点一次性找到,标为灰色的节点! } } if (!find) { s.pop(); h--; } }}
0 0
- 图以及DFS和BFS
- 【图】BFS和DFS
- 图的邻接表建立以及DFS和BFS
- BFS和DFS详解以及java实现
- BFS和DFS详解以及java实现
- 图的dfs和bfs
- 树和图的BFS 和 DFS
- 基本算法DFS以及BFS
- 图论中的BFS和DFS
- 图的BFS和DFS学习笔记
- 《大话数据结构》图的BFS和DFS
- 图的遍历(bfs 和dfs)
- 4.2-图的BFS和DFS
- 图的遍历:DFS和BFS
- 图的遍历:BFS和DFS
- 图的dfs遍历和bfs遍历
- 图的遍历:BFS和DFS
- 邻接矩阵图的dfs和bfs
- uva 645(数学)
- 加密cookie
- 关于 ++i 比i++ 快
- RHCS集群理论暨最佳实践
- servlet开发1
- 图以及DFS和BFS
- [OC学习笔记]NSNumber创建方法和检索方法
- 中国对联几点禁忌~
- ISDEV : error -6003的解决办法
- 使用RadioButton自定义样式实现喜马拉雅底部的切换功能
- PHP 插入排序
- 黑马程序员—【Java基础篇】之正则表达式
- iOS:常规问题 崩在model中
- redhat 中文乱码