图算法(邻接矩阵)
2015-08-25 15:38
696 查看
欧拉路径(u,v)是否存在:
对于连通无向图,u,v 顶点的度均为奇数,其他顶点的度均为偶数;
对于强连通有向图,其他顶点的出度==入度,u:出度==入度+1,v:入度==出度+1;
欧拉回路是否存在:
对于连通无向图,所有顶点的度均为偶数;
对于强连通有向图,所有顶点的出度==入度;
计算顶点 v 的度:
bfs(邻接矩阵):
dfs(邻接矩阵):
拓扑排序:DFS遍历后,将将顶点按照完成时间从大到小排序,所得序列,即为所有。
对于连通无向图,u,v 顶点的度均为奇数,其他顶点的度均为偶数;
对于强连通有向图,其他顶点的出度==入度,u:出度==入度+1,v:入度==出度+1;
欧拉回路是否存在:
对于连通无向图,所有顶点的度均为偶数;
对于强连通有向图,所有顶点的出度==入度;
计算顶点 v 的度:
int graphDegree(graph* g, int v) { int d = 0; for (int i = 0; i < g->v; ++i) if (g->adj[v][i] != 0) ++d; return d; }
bfs(邻接矩阵):
int d[100]; // 记录 s 到各个顶点的距离 int num = 0; int pi[100]; //记录前驱结点 void bfs(graph* g, int s) { for (int i = 0; i < g->v; ++i) d[i] = -1; int v; queue<int> q; q.push(s); d[s] = num++; pi[s] = -1; while (!q.empty()){ v = q.front(); q.pop(); for (int i = 0; i < g->v; ++i) if (g->adj[v][i] != 0 && d[i] == -1){ q.push(i); d[i] = num; pi[i] = v; } ++num; } }
dfs(邻接矩阵):
//dfs,深度优先搜索 int dd[100]; //记录顶点的发现时间,需初始化为全 -1 int fd[100]; //记录顶点的完成时间 int tm = 0; int pid[100]; //记录前驱结点 void dfsVisit(graph* g, int v) { dd[v] = ++tm; for (int i = 0; i < g->v; ++i){ if (g->adj[v][i] == 1 && dd[i] == -1){ pid[i] = v; dfsVisit(g, i); } } fd[v] = ++tm; } void dfs(graph* g) { for (int i = 0; i < g->v; ++i) dd[i] = -1; for (int i = 0; i < g->v; ++i) if (dd[i] == -1) dfsVisit(g, i); }
拓扑排序:DFS遍历后,将将顶点按照完成时间从大到小排序,所得序列,即为所有。
相关文章推荐
- uestc 250 windy数(数位dp)
- Linux的文件系统
- 运维工单--服务器申请工单
- 外来人员如何发起流程与参与内部流程?CCFlow中Guest流程说明
- 抽象工厂模式-与-工厂方法模式区别
- Android Studio上使用GBK编码
- (二)webView加载html字符串
- js实现手机网页滑动
- Mysql中文乱码问题
- Java出现No enclosing instance of type E is accessible. Must qualify the allocation with an enclosing
- OC中没有方法重载
- Opencv用鼠标绘制填充多边形
- 机房收费系统之实时收费动态下机
- 常规功能和模块自定义系统(cfcmms)—002目录
- Redis在win7上的可视化应用
- BUILD
- 获取问号后面的参数
- HiHo --#1043 : 完全背包
- C++中的引用在初始化时占用内存吗?
- 线性表之静态链表(简述)