博士期间估计这可能是唯一一个要编程的作业,搞了半天弄出这个东西,放这里为以后用到的时候查找方便。

说来也是可笑,读博士期间发现大家对上课也都没什么兴趣,老师也是那么回事,都说博士期间学的课程是要有助于以后科研工作用的,但是为什么大家都是呵呵的态度,对于期末的编程作业大家连题目都难以做到记得无误,也是真心无奈。

(1) 给出判断一个图是无爪图正则(每个点的度数相同)4-连通的算法,并给出时间复杂性。

该问题其实应该是这样问的,给定一个4连通正则图,如何判断其是否为无爪图,并且该图是无K4图。

由于上课真心没听懂啥,课后自己查了一些资料,最后给出以下编程代码。

首先对代码分开给出,先给出 4正则图的生成代码,作为测试数据集的生成代码。

"""
测试数据集,matrix矩阵的生成, matrix矩阵为4正则图
"""
def regularFour(N=10000):
matrix={} #matrix 初始化, value为集合
for k in xrange(N):
matrix[k]=set() #未满足的Node列表
unfillSet=range(N) #赋值过程的终止条件,未满足Node数大于4
while(len(unfillSet)>4):
k=unfillSet.pop(0) while(len(matrix[k])<4):
#随机选取与其配对的点
xTemp=random.choice(unfillSet) #如果选取的点不满足条件则重选
if(xTemp in matrix[k]):
continue matrix[k].add(xTemp)
matrix[xTemp].add(k) if(len(matrix[xTemp])==4):
unfillSet.remove(xTemp) """
未满足点个数小于等于4, 即0,1,2,3,4
"""
#未满足点为0,1,2,3,4时
while(True):
#无法生成K4图,失败,返回0
if(len(unfillSet)==1):
#for i in unfillSet:
# print i, matrix[i]
return 0, matrix #生成K4图,成功,返回1
if(len(unfillSet)==0):
return 1, matrix k=unfillSet.pop(0) for xTemp in copy.copy(unfillSet):
if xTemp in matrix[k]:
continue
else:
matrix[k].add(xTemp)
matrix[xTemp].add(k) if(len(matrix[xTemp])==4):
unfillSet.remove(xTemp) if(len(matrix[k])==4):
break
#失败
if(len(matrix[k])!=4):
#for i in unfillSet:
# print i, matrix[i]
return 0, matrix return matrix

测试结果:

判断 测试图是否 为无爪 ,非K4图。

def check(matrix):
#node4Set 用于判断 K4
node4Set=set()
for k in matrix:
for node3 in itertools.combinations(matrix[k], 3):
#判断是否有爪
a,b,c=node3
if( (a not in matrix[b]) and (a not in matrix[c]) and (b not in matrix[c]) ):
print "有爪"
return 0 #判断是否为K4
node4=tuple(sorted( list(node3)+[k] ))
#判断4个顶点是否已经判断过
if(node4 in node4Set):
continue node4Set.add(node4) flag4=0
for i in xrange(3):
for j in xrange(i+1, 4):
if(node4[i] in matrix[node4[j]]):
flag4+=1 if(flag4==6):
print "存在K4"
return 0
return 1

完全的代码:

# -*- coding: utf-8 -*-
import random
import copy
import pickle
import itertools
"""
测试数据集,matrix矩阵的生成, matrix矩阵为4正则图
"""
def regularFour(N=10000):
matrix={} #matrix 初始化, value为集合
for k in xrange(N):
matrix[k]=set() #未满足的Node列表
unfillSet=range(N) #赋值过程的终止条件,未满足Node数大于4
while(len(unfillSet)>4):
k=unfillSet.pop(0) while(len(matrix[k])<4):
#随机选取与其配对的点
xTemp=random.choice(unfillSet) #如果选取的点不满足条件则重选
if(xTemp in matrix[k]):
continue matrix[k].add(xTemp)
matrix[xTemp].add(k) if(len(matrix[xTemp])==4):
unfillSet.remove(xTemp) """
未满足点个数小于等于4, 即0,1,2,3,4
"""
#未满足点为0,1,2,3,4时
while(True):
#无法生成K4图,失败,返回0
if(len(unfillSet)==1):
#for i in unfillSet:
# print i, matrix[i]
return 0, matrix #生成K4图,成功,返回1
if(len(unfillSet)==0):
return 1, matrix k=unfillSet.pop(0) for xTemp in copy.copy(unfillSet):
if xTemp in matrix[k]:
continue
else:
matrix[k].add(xTemp)
matrix[xTemp].add(k) if(len(matrix[xTemp])==4):
unfillSet.remove(xTemp) if(len(matrix[k])==4):
break
#失败
if(len(matrix[k])!=4):
#for i in unfillSet:
# print i, matrix[i]
return 0, matrix return matrix def check(matrix):
#node4Set 用于判断 K4
node4Set=set()
for k in matrix:
for node3 in itertools.combinations(matrix[k], 3):
#判断是否有爪
a,b,c=node3
if( (a not in matrix[b]) and (a not in matrix[c]) and (b not in matrix[c]) ):
print "有爪"
return 0 #判断是否为K4
node4=tuple(sorted( list(node3)+[k] ))
#判断4个顶点是否已经判断过
if(node4 in node4Set):
continue node4Set.add(node4) flag4=0
for i in xrange(3):
for j in xrange(i+1, 4):
if(node4[i] in matrix[node4[j]]):
flag4+=1 if(flag4==6):
print "存在K4"
return 0
return 1 if __name__=="__main__":
"""
4正则数据生成
"""
matrixList=[]
try:
f=open("back.dat", "rb")
try:
while(True):
matrixList.append(pickle.load(f))
except EOFError:
pass
f.close()
except IOError:
f=open("back.dat", "wb")
num=0
#图数目设置默认为 100
while(num<100):
ans, matrix=regularFour()
if ans==1:
num+=1
#持久化
pickle.dump(matrix, f)
matrixList.append(matrix)
f.close() ###正式进行判断
for i in xrange(100):
print i, check(matrixList[i])

运行结果图:

个人感觉这个东西,这么说吧,随机生成的4连通4正则图 基本都是不满足这个条件的。

图论期末大作业编程题(如何判断一个4连通4正则图为无爪、无K4图)的更多相关文章

  1. C#期末大作业 消消乐 2017-06-01 18:11 275人阅读 评论(0) 收藏

    邻近期末,忙于刷题之余意识到期末大作业来不及了,匆匆赶下了作业,虽说做的很是粗糙,但完全原创的 下载链接 https://pan.baidu.com/s/1cCNLr4 大体的做大约3天完成了: 第一 ...

  2. [留念贴] C#开发技术期末大作业——星月之痕

    明天就要去上海大学参加 2015赛季 ACM/ICPC最后一场比赛 —— EC-Final,在这之前,顺利地把期末大作业赶出来了. 在这种期末大作业10个人里面有9个是从网上下载的国内计算机水平五六流 ...

  3. 中国MOOC_零基础学Java语言_期末考试的编程题_1二进制的前导的零

    期末考试的编程题 返回   这是期末考试的编程题,在60分钟内,你可以多次提交,直到正确为止. 温馨提示: 1.本次考试属于Online Judge题目,提交后由系统即时判分. 2.学生可以在考试截止 ...

  4. Java Web大作业——编程导航系统

    title: Java Web大作业--编程导航系统 categories: - - 计算机科学 - Java abbrlink: 40bc48a1 date: 2021-12-29 00:37:35 ...

  5. Web程序设计基础期末大作业——模仿QQ飞车手游S联赛官网编写的网页

    QQ飞车手游是我非常喜欢的游戏,也是我现在为数不多的常在玩的游戏,刚好我Web程序设计基础的大作业是要做一套网站,我就借此机会模仿飞车S联赛官网的页面自己做了一个网页,又加了一些自己的元素,由于我做这 ...

  6. 大一上C语言期末大作业-成绩管理系统

    都过了半年的作业了,觉得做过去得留下点什么,所以整理了代码发一下博客. 声明:程序在DevC++下用c文件模式可以正常编译使用.(控制台程序) 程序结构:

  7. 第二次作业 编程题 PAT 1001A+B Format

    Github的object-oriented仓库:1001.A+BFormat(20) 1.解题的思路过程 在之前学习C语言时曾经碰到过类似的将数字转换成字符输出的情况,这道题目要求输出的数字每三个间 ...

  8. k2datas 基础编程题,判断字符串是否有重复串

    package String; public class DuplicateString { public static boolean isDup(String s) throws Exceptio ...

  9. 剑指Offer_编程题-003 - 输入一个链表,按链表值从尾到头的顺序返回一个ArrayList

    如题 (总结) 首节点也存放了值,所以ListNode t = listNode; 直接从头开始遍历即可. 简单题目,但是构建的时候出了点问题,毕竟需要自己简单测测. 掌握链表的构建方法, 还要根据题 ...

随机推荐

  1. Hyperledger Fabric 开发环境搭建 centos7系统

    一.安装GO语言 下载最新版的go 打开Terminal,输入命令(以下命令都是以root管理员的角色进行的) su 输入密码:***** wget https://storage.googleapi ...

  2. 【PGM】Representation--Knowledge Engineering,不同的模型表示,变量的类型,structure & parameters

    Part 1. 重要的区别: Template based   vs.   specific Directed  vs.  undirected Generative  vs.  discrimina ...

  3. dns之缓存。

    1.浏览器缓存.这里以chrome为例.在chrome上输入:chrome://net-internals/#dns 可以查看chrome浏览器的dns缓存信息. 这样. 2.windows系统缓存. ...

  4. 528. Random Pick with Weight

    1. 问题 给定一个权重数组w,w[i]表示下标i的权重,根据权重从数组中随机抽取下标. 2. 思路 这道题相当于 497. Random Point in Non-overlapping Recta ...

  5. hbase优缺点

    Hbase的优缺点 1 列的可以动态增加,并且列为空就不存储数据,节省存储空间. 2 Hbase自动切分数据,使得数据存储自动具有水平scalability. 3 Hbase可以提供高并发读写操作的支 ...

  6. linux及安全《Linux内核设计与实现》第四章——20135227黄晓妍

    第四章 进程调度 进程调度程序是一个内核子系统 分配有限的处理器时间和资源 最大限度利用时间的原则(只要有可执行的进程,那么总会有进程执行) 基本工作:从一组处于等待(阻塞)状态的可执行进程中选择一个 ...

  7. IntelliJ IDEA 中配置lombok插件,编写简略风格Java代码

    1.打开IDEA的Settings面板,并选择Plugins选项,然后点击 “Browse repositories..” 2.开启注释处理 3.在pom.xml中添加lombox <!-- h ...

  8. 论文笔记——N2N Learning: Network to Network Compression via Policy Gradient Reinforcement Learning

    论文地址:https://arxiv.org/abs/1709.06030 1. 论文思想 利用强化学习,对网络进行裁剪,从Layer Removal和Layer Shrinkage两个维度进行裁剪. ...

  9. 寻找List之和的最近素数

    Task : Given a List [] of n integers , find minimum mumber to be inserted in a list, so that sum of ...

  10. Github 下载项目的某一分支版本

    参考:如何在 GitHub 下载某个程序的特定版本(代码)? 在安装ntf做int实验的时候,发现int demo的这个repo是该项目的一个branch,与master分支不一致(5 commits ...