博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【算法概论】图论算法:二部图的判断
阅读量:4178 次
发布时间:2019-05-26

本文共 1283 字,大约阅读时间需要 4 分钟。

 

将原贴中判断二分图的代码按自己的习惯改了一下:

#include 
#include
#include
#include
using namespace std;int vexnum, edgenum;bool dfs(vector
color, vector
> node, int v, int c);void solve(vector
color, vector
> node);int main(){ cout << "请输入顶点和边的个数:" << endl; cin >> vexnum >> edgenum; vector
> node(vexnum); vector
color(vexnum, 0); cout << "请输入边的顶点信息:" << endl; for (int i = 0; i < edgenum; ++i) { int u, v; cin >> u >> v; //因为是无向图,所以要双向插入顶点 node[u].push_back(v); //在u点后插入v顶点 node[v].push_back(u); //在v点后插入u顶点 } solve(color, node); return 0;}void solve(vector
color, vector
> node){ for (int i = 0; i < vexnum; ++i) { //遍历所有顶点 if (color[i] == 0) { //如果未染色,就进入深搜 if (!dfs(color, node, i, 1)) { printf("NOT BICOLORABLE.\n"); //如果返回false值,就不是二分图 return; //结束搜索 } } } printf("BICOLORABLE.\n"); //未出现相邻同色,就是二分图}bool dfs(vector
color, vector
> node, int v, int c){ color[v] = c; //为当前顶点上色 for (int i = 0; i < int(node[v].size()); ++i) { //遍历所有与之连接的顶点,即相邻顶点 if (color[node[v][i]] == c) //如果相邻的顶点同色,就返回false { return false; } if (color[node[v][i]] == 0 && !dfs(color, node, node[v][i], -c)) //如果相邻顶点未染色,就将其染为相反颜色即-c,并继续dfs { return false; //返回false } } return true; //直到所有顶点都被染色,且没出现相邻同色顶点,就返回true}

 

转载地址:http://jxtai.baihongyu.com/

你可能感兴趣的文章
LSTM
查看>>
K-means中K值的选取
查看>>
kmeans优化算法
查看>>
牛客网 构造队列
查看>>
牛客网 跳石板
查看>>
牛客网 最大的奇约数
查看>>
python大坑:AttributeError: 'module' object has no attribute 'Workbook'
查看>>
python 协程
查看>>
在写计算器时学到的
查看>>
小Q的歌单
查看>>
牛客网 计算机网络 选择题及知识点 (1)
查看>>
0-1背包问题
查看>>
TCP-IP详解卷1:协议 学习笔记(5) RARP ICMP
查看>>
Java核心技术 卷I 基础知识 学习笔记(3)
查看>>
TCP-IP详解卷1:协议 学习笔记(6) Ping
查看>>
Java核心技术 卷I 基础知识 学习笔记(4)
查看>>
Java核心技术 卷I 基础知识 学习笔记(5)
查看>>
Java核心技术 卷I 基础知识 学习笔记(6)
查看>>
微服务架构与实践 学习笔记(1)
查看>>
Java核心技术 卷I 基础知识 学习笔记(7)
查看>>