1.在图中一条边包含有两个结点。 2.一个结点可能相关n条边 因此我们可以把每一个结点包含的边放到同意集合之中(此处已链表存放,此时用顶点v作为集合的表示,即为链表表头) 其中一个边,和该边具有的两个结点作为集合中的一个元素。 x nx n ny y,编号为n的边的相关的两个结点x,y,nx是指向下一个与x相关的元素,ny是指向与y相关的元素 按照上述方法讲一个无向图划分为n个顶点为标识的集合。 具体实验(建立(包含了插入) 和遍历) #include<stdio.h> #include<stdlib.h> #define max_n 100 typedef struct v{ int ismark; int u; struct v * nextu; int v; struct v * nextv; }vex; int m,n; vex* g[max_n]={NULL,NULL,NULL,NULL 继续阅读 >>


张续 14/12/02 11:51:31
对于一个整数x,的最小k(分割次数)分割,是在(k<x的位数,x=123位数为3, x=0,位数为1),在位数-1个空格中选出k个空格将元数字分为k+1段,求其各段乘机之和最大的分割乘积。 (注意:对数字x的分割,对于任意分割位置两端必须有数字,即分割所在位置在数字之间,因为在数字两端相当于没有分割,并且任意数x的0,分割>他的k分割K>1<len(数字长度), 证明: 此时存在数字 数字:a..b.. a*10^x+b*10^y  > (a*(10^(x-y)) * b*10^y  (a*(10^(x-y)) +1> (a*(10^(x-y))  显然是正确的. 如x=3456,k=2的分割有: 3 4 56 乘积为672 3 45 6 乘积为810 34 5 6 乘积为1020 因此最大的k分割为1020 思路比较明显 数字x,的k分割,相当于数字长度l=len(x) (len(x) 数字的位数) 再l内的k分割, 记为dp[l][k] dp[l][k]=m 继续阅读 >>


张续 14/12/02 11:21:16
 最近在学数据库,用c连接时,编译总是各种错,通过网上查询后,总结了一些方法 1.遇到问题,解决的最快方法是上 […] 继续阅读 >>


常宫小戎 14/11/27 13:31:41
最近刚刚把系统换成CentOS 7,搜索了一下,关于CentOS7的新手入门的文章不多,就整理了一下我装完CentOS后做的一些东西,一边是为自己以后查询方便,一边给大家作参考。有问题欢迎指出,... 继续阅读 >>


王博 14/11/26 06:36:00
1.epoll+信号 之前用的都是epoll+多线程/线程池 现在由信号触发,基本的模型可以写为(初始化套接字 […] 继续阅读 >>


常宫小戎 14/11/24 13:30:26
运输层 主要为两台主机上的应用程序提供端到端的通信。在TCP/IP协议族中,有两个互不相同的传输协议:TCP( […] 继续阅读 >>


高源 14/11/23 05:56:26
用epoll重写了一遍文件传输,写完后才明白epoll并不适用在这种文件传输类模型中,不过也收获了一些知识,总 […] 继续阅读 >>


常宫小戎 14/11/20 13:29:16
            要想实现并发编程,最简单的模式就是1个进程/线程处理1个连接的全部生命周期,当我们使用默认的套接字时,它会将一个新的连接与一个进程或线程绑定,这样等待处理消息的进程或线程就会阻塞而等待消息准备好,在高并发下这会导致进程/线程频繁的睡眠、唤醒,从而影响了CPU的效率。而多路复用则是解决这一问题的“利器”,它可以同时监控所有的连接,它虽然也会进入睡眠等待阶段,但是这一个进程/线程是为所有连接而等待,只要有一个连接准备好了,我们的进程/线程就会被唤醒,这样就大大提高了效率。简单来说,多路复用首先需要构造一张描述符表,然后调用一个函数,直到这些描述符中的一个已准备好时,该函数才返回。 目前支持I/O复用的系统调用有:select、pselect、poll、epoll 1. select  select 函数原型如下: #include<sys/select.h> int select( int nfds, fd_set *restrict readfds, fd_set 继续阅读 >>


宋润雨 14/11/17 21:40:22
 CDN的全称是Content Delivery Network,即内容分发网络。其基本思路是尽可能避开互联网上有可能影响数据传输速度和稳定性的瓶颈和环节,使内容传输的更快、更稳定。通过在网络各... 继续阅读 >>


王博 14/11/17 17:04:00
当我们使用创建进程的函数fork(),vfork()等,创建了子进程 1.子进程先于父亲进程退出,会造成子进程的进程编号无法释放.(进程编号的范围很大,但不应该随意浪费) 2.子进程后于父亲进程退出,子进程会交给init()进程管理. 3.一个进程在执行完毕后,系统会自动清空其存在的进程的相关资源 结合上面说明,一个僵死进程的例子. #include <stdio.h> #include <sys/types.h> int main(){ pid_t p=fork(); if(p<0){ perror("for create a processor!"); return -1; }else if(p>0){ sleep(1); system("ps u"); } 继续阅读 >>


张续 14/11/08 21:01:52