图的广度优先搜索BFS(C++)
来源:互联网 发布:js小数做加减 编辑:程序博客网 时间:2024/05/22 10:59
用于实验的图:
r->2; 1->s; t->3; u->4; v->5; w->6; x->7; y->8
这里对链表的结构进行了改编:
/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */ #include <iostream> #include <queue> #include <stack> #include <vector> #include <climits> using namespace std; struct ListNode{ int val; int color;//white=0,gray=1,black=2;白表示未搜索,灰表示边界,灰点的邻接节点有些遍历了有些没有;黑色表示节点周围都遍历了 int d; vector<ListNode*> next;//存储所有的邻接节点 ListNode* pre;//便于回寻,它是从哪来的 ListNode(int x):color(0),val(x),d(16),pre(NULL){ } }; void insert(ListNode* L,ListNode* n){L->next.push_back(n);}void show(ListNode* L){int n=L->next.size();for(int i=0;i<n;i++)cout<<(L->next)[i]->val<<" ";}void BFS(ListNode* & s){s->color=1;s->d=0;queue<ListNode*> q;q.push(s);while(!q.empty()){ListNode* u=q.front();q.pop();int n=u->next.size();for(int i=0;i<n;i++){ ListNode* v=(u->next)[i];if(v->color==0){v->color=1;v->d=u->d+1;v->pre=u;q.push(v);}}u->color=2;}return;} void find_path(ListNode* t)//找到从起点s到终点t的其中一条最短路径{stack<ListNode*> path; path.push(t); ListNode* y=t->pre; while(y) { path.push(y); y=y->pre; } while(path.size()>0) { ListNode* t=path.top(); cout<<t->val<<" "; path.pop(); }} int main(){
<span style="font-family: Arial, Helvetica, sans-serif;">ListNode* a[8];</span>
int b[8][8]={{2,6},{1,5},{4,6,7},{3,8},{1},{1,3,7},{3,4,6,8},{4,7}}; for(int i=0;i<8;i++) { a[i]=new ListNode(i+1); } for(int j=0;j<8;j++) { for(int i=0;i<8;i++) if(b[j][i]) a[j]->next.push_back(a[b[j][i]-1]); } BFS(a[0]);//以a[0]为起点,搜索整个图 for(int i=0;i<8;i++) cout<<a[i]->d<<" "; cout<<endl;//显示从1节点到其他节点的距离 //从节点1(a[0])到节点8(a[7])的线路 find_path(a[7]);}
0 0
- 图的广度优先搜索BFS(C++)
- 图的广度优先搜索(BFS)
- 图的遍历---广度优先搜索(BFS)
- 邻接图的广度优先搜索(BFS)
- 图的广度优先搜索BFS
- BFS-图的广度优先搜索--邻接矩阵
- 广度优先搜索(bfs)的学习
- BFS-广度优先搜索算法(图)
- 【算法导论】图的广度优先搜索遍历(BFS)
- 广度优先搜索(BFS)
- 广度优先搜索(BFS)
- 广度优先搜索(BFS)
- 广度优先搜索(BFS)
- BFS(广度优先搜索)
- 图的深度优先搜索(DFS)和广度优先搜索(BFS)
- 图的深度优先搜索(DFS)、广度优先搜索(BFS)
- 关于图的广度优先搜索(BFS)和深度优先搜索(DFS)
- 图的广度优先搜索(BFS)和深度优先搜索(DFS)
- ButterKnife使用
- Android UI控件总结
- codeforces愚人节2013 a一个谜一样的字符串
- PHP 中 Session 反序列化机制
- $.each()
- 图的广度优先搜索BFS(C++)
- 博弈论
- 11.4导包操作
- Oracle 11g AMM与ASMM切换
- Android 开发 知识点 疑难杂症
- 两种方法获取View宽高信息
- 使用IBPP在C++中操作FireBird/Interbase数据库
- Parallax Cubemap for Planar Reflection - Remember Me反射系统学习笔记及实现
- PHP 高级编程之多线程