博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Uva 10004(二分图的判定)
阅读量:5104 次
发布时间:2019-06-13

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

这题其实很简单的说,第一次用邻接表来存图= =

首先图的储存结构是结构体+head数组。。。其实head数组保存的

struct node{    int v;    int next;}V[200*200];

 假设现在有u节点,v表示的是和他邻接的点,next保存的是v对应的编号,head数组保存的是链表的头节点编号。

比如有

1 2

1 3

1 4的点边关系那么V[head[1]].v=4;V[head[2]].v=1,V[head[3]].v=1;

现在讲讲如何判断图是不是二分图,首先对任意没染色的点进行染色,之后判断与其相邻的点若是没染色则染上与其相邻的顶点不同的颜色,若是染过色且与相邻的顶点颜色相同则不是二分图==

判断的过程用dfs来实现

#include
#include
#include
#include
using namespace std;struct node{ int v; int next;}V[200*200];int tol; int head[200];int col[200];void init(){ int tol=0; memset(head,-1,sizeof(head));}void add(int u,int v){ V[tol].v=v; V[tol].next=head[u]; head[u]=tol++;}bool bldfs(int u,int co){ int i,v; col[u]=co; for(i=head[u];i!=-1;i=V[i].next) { v=V[i].v; if(col[v]==co) return false; if(col[v]==-1&&!bldfs(v,co^1)) return false; } return true;}int main(){ int n,m; while(scanf("%d",&n)!=EOF&&n) { init(); int u,v; scanf("%d",&m); for(int i=0;i

 

转载于:https://www.cnblogs.com/NaCl/p/9580160.html

你可能感兴趣的文章
Java重试机制
查看>>
二维数组与稀疏数组的相互转化
查看>>
一步一步写自表达代码——消小球(3)
查看>>
已成功与服务器建立连接,但是在登录前的握手期间发生错误。 (provider: SSL Provider, error: 0 - 等待的操作过时。)...
查看>>
php学习笔记--引号
查看>>
快速搞懂 SQL Server 的锁定和阻塞
查看>>
ubuntu12.04安装squid
查看>>
js中自定义方法 转载
查看>>
Mockplus原型设计工具介绍
查看>>
兄弟连(python)--------------------radis日常随笔
查看>>
poj3614 Sunscreen
查看>>
我要好offer之 排序算法大总结
查看>>
python 接口自动化测试(六)使用unittest 批量用例管理
查看>>
PowerDesigner 物理数据模型(PDM) 说明
查看>>
tomcat6.exe与tomcat6w.exe的区别
查看>>
Go之数组
查看>>
Sharepoint学习笔记 –架构系列—Sharepoint的服务器端对象模型(Server Object Model) 3.服务层次结构...
查看>>
将SQL中字段值为null的记录在GridView中显示为"0"
查看>>
[转] 深刻理解Python中的元类(metaclass)
查看>>
CommonJS基础1
查看>>