周总结<7>
这周和3位朋友一起完成了系运动会的视频,感受很多,也学到很多。
周次 |
学习时间 |
新编代码行数 |
博客量 |
学到知识点 |
14 |
20 |
100 |
1 |
Html页面设计;虚拟机;(C语言)最小生成树与最短路径 |
Html案例:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>head</title>
</head>
<style type="text/css">
div{
width: 600px; /*不设定高度使其高度自适应*/
border:1px solid #CCC;
margin:0px auto;
}
#a{
height:50px;
border:1px solid #999;
line-height: 2em;
margin:0px;
}
#b{
height:350px;
border:1px solid #0CC;
line-height: 2em;
margin:0px;
}
#c{
height:50px;
border:1px solid #096;
line-height: 2em;
margin:0px;
}
</style>
<body>
<div>
<div id="a">head</div>
<div id="b">middle</div>
<div id="c">bottom</div>
</div>
</body>
</html>
C语言:
#include "stdafx.h"
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_VEX_NUM 100 //最大顶点数
#define MAX_EDGE_NUM 200
typedef int WeightType; //边的权值类型
typedef char *VexType; //顶点数据类型
typedef struct ENode{
int vex1,vex2;
WeightType w;
}ENode;
typedef struct{
int vexnum,edgenum;
VexType vexlist[MAX_VEX_NUM];
ENode edgelist[ MAX_EDGE_NUM];
}ELGraph;
#define MinEdge 32767
/********************************************************/
//Prim算法的最小生成树
ENode * Prim_MST(ELGraph *g){
int edgeflags[MAX_EDGE_NUM],vexflags[MAX_VEX_NUM];
int i,j,k1,k2;
for(i=0;i<MAX_EDGE_NUM;i++)
edgeflags[i]=-1;
for(i=0;i<MAX_VEX_NUM;i++)
vexflags[i]=-1;
vexflags[0]=0;//先交第一个顶点
int nvex=1;
int eposi=-1,vposi=-1;
WeightType tmp;
for(i=1;i<MAX_VEX_NUM;i++){
tmp=MinEdge;
for(j=0;j<MAX_EDGE_NUM;j++){//循环获取i顶点的每一条边
if(edgeflags[j]!=-1) continue; //此边已加入集合,则取下一条边
for(k1=0;k1<i;k1++){
if(g->edgelist[j].vex1==vexflags[k1]){ //此边的顶点已在集合中否?
// vposi=k1;
break;//是,退出
}
} //k1==i 表示此vex1顶点在TV集合中
for(k2=0;k2<i;k2++){
if(g->edgelist[j].vex2==vexflags[k2]){//此边的另一个顶点已在集合中否?
// vposi=k2;
break;//是 ,退出
}
}
if(k1==i && k2==i) //此边的两个顶点都在集合中,则形成回路,不能使用此边
continue;
if(k1!=i && k2!=i) //此边的两个顶点都不在集合中,不能使用此边
continue;
//此边只有一个顶点在集合中,
if(g->edgelist[j].w<tmp){//此边的权是否最小
tmp=g->edgelist[j].w;//是,暂时保存此权
eposi=j; //暂时保存此边
//暂时保存此边不在集合中的一个顶点
if(k1==i)
vposi=g->edgelist[j].vex1;
if(k2==i)
vposi=g->edgelist[j].vex2;
}
}
vexflags[i]=vposi;//把此边不在集合中的顶点加到集合中
edgeflags[eposi]=1;//标记此边已使用,即此边加到集合中。
}
ENode *pen=(ENode*)malloc(sizeof(ENode)*(g->vexnum-1));
k1=0;
int n=g->vexnum-1;
for(i=0;i<MAX_EDGE_NUM ;i++){
if(edgeflags[i]==1)
{ pen[k1++]=g->edgelist[i];
if(k1==n)
break;
}
}
return pen;
}
/********************************************************/
//Kruskal算法的最小生成树
//根据边的权值从小到大排序
void Sort(ENode *pen,int n){ //pen为边集,n为边的个数
int i,j;
WeightType tmp=pen[0].w;
int posi=0;
ENode etmp;
for(i=0;i<n-1;i++){
posi=i;tmp=pen[i].w;
for(j=i+1;j<n;j++){
if(pen[j].w<tmp){
tmp=pen[j].w;posi=j;
}
}
etmp=pen[i]; pen[i]=pen[posi];pen[posi]=etmp;
}
}
ENode* Kruskal_MST(ELGraph *gl)
{
int *vset=(int *)malloc(sizeof(int)*gl->vexnum);
//存放最小生成树的n-1条边
ENode *pen=(ENode *)malloc(sizeof(ENode) * (gl->vexnum-1));
int i;
for(i=0;i<gl->vexnum;i++) vset[i]=i; //每个顶点单独一个连通分量
Sort(gl->edgelist,gl->edgenum); //根据边的权值从小到大排序
int s=0,j=0;
int c1,c2;
while(s < gl->vexnum-1 && j< gl->edgenum){
c1=gl->edgelist[j].vex1;c2= gl->edgelist[j].vex2;//取边的两个顶点
if(vset[c1] !=vset[c2])//判断两个顶点的连通分量相同否?
{ //若两个顶点的连通分量不相同,则将该边加入到pen边集中
pen[s].vex1=c1;pen[s].vex2=c2;pen[s].w=gl->edgelist[j].w;
s++;
for(i=0;i<gl->vexnum;i++)
if(vset[i]==vset[c2])
vset[i]=vset[c1];//将两个不同顶点的连通分量合并成一个连通分量
}
j++;//取下一条边
}
free(vset);
//free(pen);
return pen;
}
/********************************************************/
//输出与顶点v相连的顶点及其边的权值,gl为原图,pen为最小生成树
void PrintV(ELGraph *gl, ENode *pen, VexType v)
{
int i,posi=-1;
for(i=0;i<gl->vexnum;i++){
if(strcmp(v,gl->vexlist[i])==0)
{ posi=i;
break;
}
}
if(posi==-1){
printf("无此顶点%s数据\n",v);
return;
}
printf("顶点%s",v);
for(i=0;i<gl->vexnum-1;i++){
if(pen[i].vex1==posi){
printf("与%s顶点相连的权值为%d ",gl->vexlist[pen[i].vex2],pen[i].w);
}
if(pen[i].vex2==posi){
printf("与%s顶点相连的权值为%d ",gl->vexlist[pen[i].vex1],pen[i].w);
}
}
printf("\n");
}
int main(int argc, char* argv[])
{
printf("303 柳晓雅 最小生成树\n");
ELGraph g;
ENode *pe=g.edgelist;
g.vexnum=7;
g.edgenum=10;
g.vexlist[0]="v0"; g.vexlist[1]="v1";g.vexlist[2]="v2";
g.vexlist[3]="v3";g.vexlist[4]="v4";g.vexlist[5]="v5";
g.vexlist[6]="v6";
pe[0].vex1=0; pe[0].vex2=5; pe[0].w=8;
pe[1].vex1=0; pe[1].vex2=6; pe[1].w=16;
pe[2].vex1=1; pe[2].vex2=2; pe[2].w=6;
pe[3].vex1=1; pe[3].vex2=3; pe[3].w=5;
pe[4].vex1=2; pe[4].vex2=3; pe[4].w=9;
pe[5].vex1=2; pe[5].vex2=5; pe[5].w=13;
pe[6].vex1=3; pe[6].vex2=4; pe[6].w=16;
pe[7].vex1=3; pe[7].vex2=6; pe[7].w=12;
pe[8].vex1=4; pe[8].vex2=5; pe[8].w=15;
pe[9].vex1=4; pe[9].vex2=6; pe[9].w=7;
/* g.edgelist[0].vex1=0;g.edgelist[0].vex2=1;g.edgelist[0].w=10;
g.edgelist[1].vex1=0;g.edgelist[1].vex2=4;g.edgelist[1].w=9;
g.edgelist[2].vex1=0;g.edgelist[2].vex2=5;g.edgelist[2].w=15;
g.edgelist[3].vex1=1;g.edgelist[3].vex2=2;g.edgelist[3].w=1;
g.edgelist[4].vex1=1;g.edgelist[4].vex2=3;g.edgelist[4].w=6;
g.edgelist[5].vex1=1;g.edgelist[5].vex2=5;g.edgelist[5].w=11;
g.edgelist[6].vex1=2;g.edgelist[6].vex2=3;g.edgelist[6].w=6;
g.edgelist[7].vex1=3;g.edgelist[7].vex2=4;g.edgelist[7].w=8;
g.edgelist[8].vex1=3;g.edgelist[8].vex2=5;g.edgelist[8].w=4;
g.edgelist[9].vex1=4;g.edgelist[9].vex2=5;g.edgelist[9].w=13;
*/
ENode *pen=Prim_MST(&g);
ENode *pen2= Kruskal_MST(&g);
char ss[100];
while(1){
printf("请输入顶点数据,输入0退出:");
scanf("%s",ss);
if(ss[0]=='0') break;
printf("Prim 算法生成树: ");
PrintV(&g, pen, ss);
printf("Kruskal算法生成树:");
PrintV(&g, pen2, ss);
printf("\n");
}
free(pen);
free(pen2);
return 0;
}
周总结<7>的更多相关文章
- 2015 Autodesk 开发者日( DevDays)和 助力开发周火热报名中
Autodesk 软件(中国)有限公司 ADN 市场部真诚地邀请您参加我们一年一度的 "Autodesk 开发者日"(简称 DevDays),以及第一次随同开发者日举办的" ...
- 记一周cdqz训练
#include <cstdio> using namespace std; int main(){ puts("转载请注明出处:http://www.cnblogs.com/w ...
- java第三周学习
这一周学习的是java数组面向对象 数组中存放的数据的类型:既可以是基本数据类型也可以是引用数据类型. 数组的定义方式: 1 数据类型[] 数组名; 2 数据类型 数组名[]; 数组的初始化: 1.静 ...
- java第二周周学习总结
java运算符和循环 java运算符 一.for 语句 for 语句的基本结构如下所示:for(初始化表达式;判断表达式;递增(递减)表达式){ 执行语句; //一段代码} 初始化表达式:初 ...
- my97DatePicker选择年、季度、月、周、日
My97DatePicker是一款非常灵活好用的日期控件.使用非常简单. 下面总结下使用该日历控件选择年.季度.月.周.日的方法. .选择年 <input id="d1212" ...
- 第16周界面设计PSP总结
计划:需1周完整完成 需求分析:作为一个观众,我希望能够了解每一场的比分结果,随时跟进比赛进程 生成设计文档:暂无 设计复审:暂无与组员进行设计复审 代码规范:Visual Studio2010 具体 ...
- 三周,用长轮询实现Chat并迁移到Azure测试
公司的OA从零开始进行开发,继简单的单点登陆.角色与权限.消息中间件之后,轮到在线即时通信的模块需要我独立去完成.这三周除了逛网店见爱*看动漫接兼职,基本上都花在这上面了.简单地说就是用MVC4基于长 ...
- 根据起止日期构建指定查询条件:第N周(yyyy-MM-dd/yyyy-MM-dd)
项目中有个查询模块中用到查询条件: 年和周. 以往我直接指定是第几周,后来测试反映如果直接选择周的话并不知道所选周代表的年月日,而无法最快查询数据,后更改查询条件如下: 指定一个起始年月,根据起始年月 ...
- 第0/24周 SQL Server 性能调优培训引言
大家好,这是我在博客园写的第一篇博文,之所以要开这个博客,是我对MS SQL技术学习的一个兴趣记录. 作为计算机专业毕业的人,自己对技术的掌握总是觉得很肤浅,博而不专,到现在我才发现自己的兴趣所在,于 ...
- 从零开始学Python第一周:Python基础(上)
Python语法基础(上) 一,Python的变量 (1)创建变量 变量的含义:存储信息的地方 创建变量并赋值 x = 1 print x x = 123 #再次赋值 print x (2)使用变量 ...
随机推荐
- 课时6.HTTP协议(理解)
HTTP是Hypertext Transfer Protocol的缩写,译为:超文本传输协议 什么是协议? 在现实生活中有很多的协议,例如租房协议/买卖协议/离婚协议 无论是什么协议它们都有一个共同点 ...
- PHP目前比较常见的五大运行模式
做 php 开发的应该都知道 php 运行模式概念吧,本文将要和大家分享的是关于php目前比较常见的五大运行模式:包括cgi .fast-cgi.cli.isapi.apache模块的DLL ,下面作 ...
- Spark SQL join的三种实现方式
引言 join是SQL中的常用操作,良好的表结构能够将数据分散到不同的表中,使其符合某种规范(mysql三大范式),可以最大程度的减少数据冗余,更新容错等,而建立表和表之间关系的最佳方式就是join操 ...
- BurpSuite系列(十)----Extender模块(扩展器)
一.简介 Burp在软件中提供了支持第三方拓展插件的功能,方便使用者编写自己的自定义插件或从插件商店中安装拓展插件.Burp扩展程序可以以多种方式支持自定义Burp的行为,例如:修改HTTP请求和响应 ...
- Oracle——系统数据字典常用命令(查看表所属空间层目录等)
发生背景: 项目前后台交互对接时候,经常存在对底层表蒙圈情况尤其是oracle数据库,所在层级不同会导致操作对象直接的改变,从而发生意向不到的事情:很多时候需要了解我们所操作对象所处的层级等相关信息, ...
- Linux入门——基础系统设置命令
以下为centos7实验环境 1.网卡管理工具命令——nmcli 参考:http://www.iteye.com/topic/1141839 2.主机名称设置——hostnamectl [root@s ...
- 20155236 2016-2017-2《Java程序设计》课程总结
20155236 2016-2017-2<Java程序设计>课程总结 作业链接汇总 预备作业1:对专业学习的展望,课程方面.师生关系的建议 预备作业2:在实践中学习,自己的相关经验以及C语 ...
- BZOJ2140_稳定婚姻_KEY
题目传送门 暴力直接对于每个点跑一遍二分图匹配,能拿四十分. 然而我们考虑正解. 对于一对Couple我们建♂->♀的一条边,对于一对曾经有恋情的情侣我们建♀->♂的一条边. 跑Tarja ...
- 一个奇怪的JS函数
今天在分析一个jQuery插件源码的时候,发现了一个奇怪的函数. 这个函数的目的是为数字补零,如传入7,输出07,传入12输出12.由于是对时间补零,只截取后两位. // add leading ze ...
- hive 数据导入
Hive的几种常见的数据导入方式这里介绍四种:(1).从本地文件系统中导入数据到Hive表:(2).从HDFS上导入数据到Hive表:(3).从别的表中查询出相应的数据并导入到Hive表中:(4).在 ...