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

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

(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正则图 基本都是不满足这个条件的。

&lbrack;留念贴&rsqb; C&num;开发技术期末大作业——星月之痕

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

中国MOOC&lowbar;零基础学Java语言&lowbar;期末考试的编程题&lowbar;1二进制的前导的零

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

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

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

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

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

第二次作业 编程题 PAT 1001A&plus;B Format

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

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

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

剑指Offer&lowbar;编程题-003 - 输入一个链表,按链表值从尾到头的顺序返回一个ArrayList

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

中国MOOC&lowbar;面向对象程序设计——Java语言&lowbar;期末考试编程题&lowbar;1细胞自动机

期末考试编程题 返回   这是期末考试的编程题 温馨提示: 1.本次考试属于Online Judge题目,提交后由系统即时判分. 2.学生可以在考试截止时间之前提交答案,系统将取其中的最高分作为最终成 ...

随机推荐

ASP&period;NET压缩输出的HTML内容

在ASP.NET中,怎么压缩输出的HTML内容,怎么替换HTML中的换行符,空白,TAB等符号呢? 1.新建一个基类,继承自System.Web.UI.Page,代码如下: using System. ...

servlet学习笔记&lowbar;4

一.response.1.response.characterEncoding和response.setContentType("text/html;charset=UTF-8") ...

Django messages框架

一.简介 在网页应用中,你经常需要在处理完表单或其它类型的用户输入后,显示一个通知消息(也叫做“flash message”)给用户 对于这个功能,Django 提供基于Cookie 和会话的消息,无 ...

BizTalk动手实验(三)BizTalk开发综合实验

1 课程简介 通过本课程熟悉BizTalk开发组件Schema/Map/Orchestration/Pipeline的开发与配置 2 准备工作 3 演示 3.1 创建与配置BizTalk应用程序 1. ...

js中window的属性

Window的属性 属性描述 closed 获取引用窗口是否已关闭. defaultStatus 设置或获取要在窗口底部的状态栏上显示的缺省信息. dialogArguments 设置或获取传递给模式 ...

NSDictionary、NSMutableDictionary的基本用法

NSDictionary.NSMutableDictionary的基本用法 1.不可变词典NSDictionary 字典初始化 NSNumber *numObj = [NSNumber numberW ...

Jdk命令之jps

jps -- Java Virtual Machine Process Status Tool jps命令类似于Linux下的ps命令,可以列出本机所有正在运行的java进程.

不安装oracle客户端也可以使用pl&sol;sql developer

通常情况下,用PL/SQL Developer连接Oracle是需要安装Oracle客户端软件的,这也就意味着你的硬盘将被占用大约1G-2G的空间,对于Windows操作系统来说,你还会多出一些开机自 ...

用nodejs&comma;express&comma;ejs&comma;mongo&comma;extjs实现了简单了网站后台管理系统

源代码下载地址:http://download.csdn.net/detail/guoyongrong/6498611 这个系统其实是出于学习nodejs的目的而改写的系统. 原来的系统前端使用了ex ...

4&period; ZooKeeper 基本操作

ZooKeeper的数据模型及其API支持以下九个基本操作: 操作 描述 create 在ZooKeeper命名空间的指定路径中创建一个znode delete 从ZooKeeper命名空间的指定路径 ...

c语言编写程序判断图的连通,图论期末大作业编程题(如何判断一个4连通4正则图为无爪、无K4图)...相关推荐

  1. 天津大学仁爱学院c语言期末考试题,天津大学《C语言程序设计》2016年7月考试期末大作业...

    请在以下三组题目中任选一组作答,满分100分. 第一组: 一.编程题(每题20分,共40分) 1.编写程序.每当输入10个评委的分数后,求该选手的最后得分并输出(设10个评委按照以下打分原则为选手打分 ...

  2. 用java语言编写程序计算九宫图

    前言 对于程序员来说,用程序解决数学问题是最有趣的事情之一.本人研究了一个能够轻易计算九宫图的算法,并且用java语言编写程序得以实现.现将算法和代码公布,欢迎广大程序爱好者前来阅读.交流. 九宫图简 ...

  3. c语言计算机编程例题详解,计算机C语言编写程序题及答案解析精选.doc

    计算机C语言编写程序题及答案解析精选 2011年计算机二级C语言编写程序题及答案解析精选 [4.1]已知银行整存整取存款不同期限的月息利率分别为:0.315% 期限一年0.330% 期限二年月息利率 ...

  4. matlab编写正整数阶乘函数,用matlab语言编写程序:编写一个计算阶乘的函数,再编写一个脚本文件,通过键盘输入计算阶乘的n值....

    点击查看用matlab语言编写程序:编写一个计算阶乘的函数,再编写一个脚本文件,通过键盘输入计算阶乘的n值.具体信息 答:编写一个matlab文件,求1到n的阶乘之和.其代码编写的目的,就是学会自定义 ...

  5. python输入一个正整数n求下列算式的值_C语言编写程序:输入一个正整数x和一个正整数n,求下列算式的值。,C语言 编写一个程序,输入一个正整数,求出它是几位数。...

    导航:网站首页 > C语言编写程序:输入一个正整数x和一个正整数n,求下列算式的值.,C语言 编写一个程序,输入一个正整数,求出它是几位数. C语言编写程序:输入一个正整数x和一个正整数n,求下 ...

  6. C++中如何读取一个数的位数_C语言编写程序求水仙花数

    C语言编写程序求水仙花数 水仙花数是一个数学问题,其实质是一个三位数,个位数的立方加十位数的立方加百位数的立方之和等于这个三位数本身.例如153=1*1*1+5*5*5+3*3*3,即153=1+12 ...

  7. python求1到n的奇数和_编写程序。输入任意整数n,计算1到n的奇数和。C语言编写程序 输入整数N 显...

    编写程序.输入任意整数n,计算1到n的奇数和. C语言编写程序 输入整数N 显 www.zhiqu.org 时间: 2020-11-23 解题思路:循环判断1到N的每一个数: 若除以2是结果为整数,也 ...

  8. c语言编写程序,输入正整数n,计算0到n以内所有奇数的和,c语言输入正整数n,计算1~n中的奇数和以及偶数和并输出....

    用C语言编写程序,输入一个正整数n(1 #include"stdio.h"intmain(){\x09inti,j,n;\x09inta[12];\x09intmin,mx;\x0 ...

  9. c语言编写一个程序计算某年某月有几天,c语言编写程序,输入某年某月,求该月的天数...

    c语言编写程序,输入某年某月,求该月的天数 #包括 voidmain() { 年.月.日: 请输入当前日期(年月以空格分隔): ': 中国年月 而(月=0 | |月12) { cout '输入时间有误 ...

最新文章

  1. GAN与NLP的讨论
  2. 5G时代的CDN将会怎么样?
  3. 解决jquey中当事件嵌套时,内层事件会执行多次的问题
  4. 某银行省级数据中心IT运维服务体系建设完整思路
  5. SQL server判断字符串是否包含某个字符串
  6. Spring中bean的作用域
  7. python如何计算整数和_python 整数和浮点数
  8. 中兴手机官宣吴京代言 以科技为勇敢者助力
  9. mysql时间 gt_关于Mysql 5.6 TIMESTAMPDIFFgt;=和gt;的一个问题 - SegmentFault 思否
  10. Talkfree7手机电视,IPTV,VOIP-GPS-3G手机,WAP是未来
  11. 超赞,1万字的后端面试题及面试经验分享!
  12. 计算机技术在通信应用文献,通信论文参考文献
  13. 类似QQ的可隐藏的便签工具SNOTE
  14. 南通大学计算机组成原理实验,南通大学医学院(护理学院)专业
  15. 安装配置磁盘阵列SAN存储系统
  16. CSDN写作表情emoji大全
  17. 性能优化的 10 个技巧
  18. 苹果微信分身版ios_苹果手机怎么下载微信分身
  19. 第1章第2节:PowerPoint的选项卡 [PowerPoint精美幻灯片实战教程]
  20. project Structure中的Artifacts是什么

热门文章

  1. Arduino控制RGB三色LED灯实验、程序代码、连线图、仿真
  2. 1297 树中节点的祖先
  3. 7-19 大写字母的序列
  4. 如何利用Python构建股票波动率因子模型?
  5. 计算机网络第一次实验 多人聊天
  6. 夫妻吵架将4个月大女婴扔在路边
  7. 机器学习之分类-决策树随机森林
  8. ps写实计算机图标,PS教你如何绘制一个写实USB图标
  9. CSU OJ:1427 谭松松的旅游计划(LCA)
  10. 阿里10年分布式技术沉淀:阿里高可用体系核心缔造者、全链路压测创始人告诉你!...