(a) 从图中的某个顶点做深度优先遍历,并将不同层的顶点标记为红黑两种颜色,使得每条树边的两个顶点的颜色都不相同,如果遇到一条回边并且两个顶点的颜色都相同则说明图不是二部图。

(b)如果存在一个长度为奇数的环,则环的顶点的个数和边的条数为奇数,若把环的顶点分成两个集合,至少有一个集合的两个点是相邻的,即无法把点分成两个集合,使得每一个集合中的两个点不存在边相连。一个图为二部图的充要条件是对于每一条树边(u,v)要使u和v的颜色不同,即u和v之间存在偶数条边。

(c)三种颜色

 package org.xiu68.ch03.ex11;

 public class Ex3_7 {

     //用线性时间证明一个图是否是二部图
public static void main(String[] args) {
// TODO Auto-generated method stub
int[][] graph=new int[][]{
{0,1,0,1},
{1,0,1,0},
{0,1,0,1},
{1,0,1,0}
};
MGraph m1=new MGraph(graph);
m1.biPartGraph(0); System.out.println("************************************");
int[][] graph2=new int[][]{
{0,1,1,0,0,0},
{1,0,0,0,0,1},
{1,0,0,1,1,1},
{0,0,1,0,1,0},
{0,0,1,1,0,0},
{0,1,1,0,0,0}
};
MGraph m2=new MGraph(graph2);
m2.biPartGraph(2);
} } class MGraph{
private int vexNum; //顶点数量
private int[][] edges; //边
private int[][] visitedEdges; //记录已访问的边
private int[] visited; //标记顶点访问状态,-1表示未访问到,0表示正在访问中,1表示已访问
private boolean[] color; //表示每个顶点有两种颜色,true和false表示,表示所属的顶点的集合(V1或V2) public MGraph(int[][] edges){
this.edges=edges;
this.vexNum=edges.length;
this.visitedEdges=new int[vexNum][vexNum];
this.visited=new int[vexNum];
for(int i=0;i<vexNum;i++){
visited[i]=-1;
} this.color=new boolean[vexNum];
}
public void biPartGraph(int v){
color[v]=true;
boolean result=dfs(v);
if(result)
System.out.println("二部图");
else
System.out.println("非二部图");
}
public boolean dfs(int v){
visited[v]=0;
for(int i=0;i<vexNum;i++){
if(edges[v][i]==1 && visitedEdges[v][i]!=1){ //两个顶点存在边未被访问过 visitedEdges[v][i]=visitedEdges[i][v]=1; //标记边已访问 if(visited[i]==0){ //访问到访问状态为0的顶点
if(color[v]==color[i]) //两个顶点颜色相同
return false;
else //两个顶点颜色不同
color[i]=!color[v];
}else if(visited[i]==-1){ //访问到访问状态为-1的顶点
color[i]=!color[v];
if(!dfs(i))
return false;
}
}//if
}//for
visited[v]=1;
return true;
}
}

Ex3_7无向图二部图_十一次作业的更多相关文章

  1. Ex 3_25 图中每个顶点有一个相关价格..._十一次作业

    (a)首先对有向无环图进行拓扑排序,再按拓扑排序的逆序依次计算每个顶点的cost值,每个顶点的cost值为自身的price值与相邻顶点间的cost值得最小值 (b)求出图中的每一个强连通分量,并把所有 ...

  2. Ex 3_17 无穷路径..._十一次作业

    (a) Inf(p)在p中出现了无穷多次,说明Inf(p)存在一个环当中,所以这个环的顶点肯定是某一个强连通部件的子集. (b) 若G中存在一条无穷路径,则G中至少存在一个环,且这个环至少有两个顶点, ...

  3. Ex3_15 判断图是否是一个强连通分量 判断点是否在汇点强连通分量中_十一次作业

    (a) 可以用图中的每一个顶点表示街道中的每个十字路口,由于街道都是单行的,所以图是有向图,若从一个十字路口都有一条合法的路线到另一个十字路口,则图是一个强连通图.即要验证的是图是否是一个强连通图. ...

  4. 第十一次作业 - Alpha 事后诸葛亮(团队)

    软工 · 第十一次作业 - Alpha 事后诸葛亮(团队) 组长本次作业链接 现代软件工程 项目Postmortem 设想和目标 1.我们的软件要解决什么问题?是否定义得很清楚?是否对典型用户和典型场 ...

  5. 福大软工·第十一次作业-Alpha事后诸葛亮

    福大软工·第十一次作业-Alpha事后诸葛亮 组长博客链接 本次作业博客链接 项目Postmortem 模板 设想和目标 我们的软件要解决什么问题?是否定义得很清楚?是否对典型用户和典型场景有清晰的描 ...

  6. 第十三次作业——回归模型与房价预测&第十一次作业——sklearn中朴素贝叶斯模型及其应用&第七次作业——numpy统计分布显示

    第十三次作业——回归模型与房价预测 1. 导入boston房价数据集 2. 一元线性回归模型,建立一个变量与房价之间的预测模型,并图形化显示. 3. 多元线性回归模型,建立13个变量与房价之间的预测模 ...

  7. 福大软工 · 第十一次作业 - Alpha 事后诸葛亮(团队)

    福大软工·第十一次作业-Alpha事后诸葛亮 组长博客链接 本次作业博客链接 项目Postmortem 模板 设想和目标 我们的软件要解决什么问题?是否定义得很清楚?是否对典型用户和典型场景有清晰的描 ...

  8. 2017-2018-2 1723《程序设计与数据结构》第十一周作业 & 实验三 & (总体)第三周结对编程 总结

    作业地址 第十一次作业:https://edu.cnblogs.com/campus/besti/CS-IMIS-1723/homework/1933 (作业界面已评分,可随时查看,如果对自己的评分有 ...

  9. 实验十一 团队作业7—团队项目设计完善&编码测试

    实验十一 团队作业7—团队项目设计完善&编码测试 实验时间 2018-6-8 Deadline: 2018-6-20 10:00,以团队随笔博文提交至班级博客的时间为准. 评分标准: 按时交 ...

随机推荐

  1. java.lang.String & java.lang.StringBuilder

    java.lang.String & java.lang.StringBuilder String 成员方法 作用 public charAr(int index) 返回给定位置的代码单元 p ...

  2. cookie与session的区别与关系

    cookie与session的区别 1. 存储位置不同 cookie存储在浏览器中 session存储在服务端里 2. 大小不同 cookie最大4K session由于是存在服务端,因此理论上没有大 ...

  3. VisualStuido C# Files 的值“<<<<<<< .mine”无效。路径中具有非法字符。

    直接在项目中搜是搜不到<<<<<<.mine,可以直接删除obj文件夹.

  4. 传入mybatis的xml为Long型时报There is no getter for property named 'VARCHAR' in

    修改前   <insert id="insert" parameterType="com.taotao.pojo.TbContent" >    i ...

  5. 二十九、Linux 进程与信号——minishell(2)

    编程内容: 1.完成  echo env export 命令 2.完成前后台进程 3.完成重定向 完整代码如下: 29.1 主函数.通用头文件和Makefile 29.1.1 主函数 mshell_m ...

  6. Debian Security Advisory(Debian安全报告) DSA-4406-1 waagent

    Package        : waagentCVE ID         : CVE-2019-0804 Francis McBratney发现Windows Azure Linux代理创建了具有 ...

  7. NLTK1及NLP理论基础

    以下为Aron老师课程笔记 一.NLTK安装 1. 安装nltk https://pypi.python.org/pypi/nltk 把nltk-3.0.0解压到D:\Anacond3目录 打开cmd ...

  8. 6-12mysql库的操作

    1,mysql库的各种分类: nformation_schema: 虚拟库,不占用磁盘空间,存储的是数据库启动后的一些参数,如用户表信息.列信息.权限信息.字符信息等. performance_sch ...

  9. ANSI C、ISO C、Standard C联系与区别

    做C语言开发的人,经常会遇到“ANSI C”.“ISO C”与“Standard C”三种术语,经常会让人傻傻分不清楚.博主之前按也是搞不清三者的关系,于是某天下定决心,一定要搞清楚三者的关系,先百度 ...

  10. 【jquery隐藏、显示事件and提示callback】【淡入淡出fadeToggle】【滑入滑出slideToggle】【动画animate】【停止动画stop】

    1.jquery隐藏and显示事件 $("p").hide();      //隐藏事件$("p").hide(1000);  //1秒内缓慢隐藏$(" ...