上一页 1 ··· 90 91 92 93 94 95 96 97 98 ··· 103 下一页
摘要: 问题描述: 有一批共n个集装箱要装上2艘载重量分别为c1和c2的轮船,其中集装箱i的重量是wi,且不能超。算法思想: 最优装载方案: 将第一艘轮船尽可能的装满; 然后将剩余的装载第二艘船上算法描述:template <class Type>class Loading{ friend Type MaxLoading(Type [],Type,int); private: void Backtrack(int i); int n; Type * w,c,cw,bestw;};template <class Type>void Loadin... 阅读全文
posted @ 2012-10-22 16:45 xingoo 阅读(9127) 评论(0) 推荐(0)
摘要: 回溯法:有通用解题法 之称,可以系统的搜索一个问题的所有解和任一解,是一个既带有系统性,又带有跳跃性的搜索算法。算法基本思想: 确定解空间后 从开始节点出发,以深度优先的方式搜索整个解空间。 如果当前扩展结点不能再向纵深方向移动,当前节点为死节点。此时,应该往回移动至最近的一个活节点处。,并是这个或节点成为当前节点的扩展结点。提高算法方式(剪枝函数): 1 用约束函数在扩展结点出剪去不满足约束的子树 2 用限界函数剪去得不到最优解的子树。回溯法解题步骤: 1 定义问题的解空间 2 确定易于搜索的解空间结构 3 以深度优先方式搜索解空间,并在搜索过程中用剪枝函数避免无效搜索。递归... 阅读全文
posted @ 2012-10-22 16:16 xingoo 阅读(1381) 评论(0) 推荐(0)
摘要: 发送原始UDP封包时:1 以IPPROTO_UDP 为协议类型创建一个原始套接字,打开原始套接字上的IP_HDRINCL选项2 构建UDP封包,要先设置IP头,设置UDP头,最后UDP净荷数据。3 初始化完整的UDP封包之后,调用sendto函数即可将他发送。计算UDP封包校验和的过程如下:void ComputeUdpPseudoHeaderChecksum( IPHeader *pIphdr, UDPHeader *pUdphdr, char *payload, int payloadlen ){ char buff[1024]; ... 阅读全文
posted @ 2012-10-21 21:57 xingoo 阅读(4204) 评论(0) 推荐(0)
摘要: 用来确定路由器的IP地址,也就是在网络上到达特定主机所经过的计算机。程序需要两个套接字:1 一个用于接收ICMP封包的原始套接字sRaw2 用于发送TTL不断增加UDP封包的套接字sSend。实现代码如下:void main(){ char *szDestIp = "10.16.115.178"; // 210.181.18.12910.16.115.25 61.55.66.30 char recvBuf[1024] = { 0 }; // 创建用于接收ICMP封包的原始套节字,绑定到本地端口 SOCKET sRaw = ::socket(AF_INET, SOCK_R.. 阅读全文
posted @ 2012-10-21 21:51 xingoo 阅读(406) 评论(0) 推荐(0)
摘要: 发送ICMP报文时,必须程序自己计算校验和,将它填入ICMP头部对应的域中。校验和的计算方法: 将数据以字为单位累加到一个双字中,如果数据长度为奇数,最后一个字节将被扩展到字,累加的结果是一个双字,最后将这个双字的高16位,低16位相加后取反,便得到了校验和。下面是checksum的计算校验和的代码:USHORT checksum(USHORT* buff, int size){ unsigned long cksum = 0; while(size>1) { cksum += *buff++; size -= sizeof(USHORT); ... 阅读全文
posted @ 2012-10-21 21:39 xingoo 阅读(2769) 评论(0) 推荐(1)
摘要: 原始套接字有两种:1 在IP头中使用预定义的协议2 在IP头中使用自定义的协议创建原始套接字使用socket或者WSASocket,代码如下:SOCKET sRaw = ::socket(AF_INET,SOCK_RAW,IPPROTO_ICMP)原始套接字提供管理下层传输的能力,仅administrator组的成员能够创建SOCK_RAW类型的套接字。 阅读全文
posted @ 2012-10-21 21:04 xingoo 阅读(243) 评论(0) 推荐(0)
摘要: RGB颜色对照表因为兼容性问题,色阶板功能只能在IE浏览器中运行RGB颜色对照表#FFFFFF#FFFFF0#FFFFE0#FFFF00#FFFAFA#FFFAF0#FFFACD#FFF8DC#FFF68F#FFF5EE#FFF0F5#FFEFDB#FFEFD5#FFEC8B#FFEBCD#FFE7BA#FFE4E1#FFE4C4#FFE4B5#FFE1FF#FFDEAD#FFDAB9#FFD700#FFD39B#FFC1C1#FFC125#FFC0CB#FFBBFF#FFB90F#FFB6C1#FFB5C5#FFAEB9#FFA54F#FFA500#FFA07A#FF8C69#FF8C00# 阅读全文
posted @ 2012-10-20 12:42 xingoo 阅读(5212) 评论(0) 推荐(0)
摘要: 算法思想:1 将G的n个顶点看成n个孤立的连通分支,所有的边按权从小到大排序2 当查看到第k条边时, 如果断点v和w分别是当前的两个不同的连通分支t1和t2中的顶点时,就用边(v,m)j将t1,t2连接成一个连通分支,然后继续查看第k+1条边; 如果端点v和w当前的同一个连通分支中,就直接查看第k+1条边实现代码:template <class Type>class EdgeNode{ friend ostream& operator<<(ostream&,EdgeNode<Type>); friend bool Kruskal(int,in 阅读全文
posted @ 2012-10-20 12:36 xingoo 阅读(578) 评论(0) 推荐(0)
摘要: 基本思想:1 置S={1}2 只要S是V的真子集就做如下的贪心选择: 选取满足条件的i ,i属于S,j输入V-S,且c[i][j]最小的边,并将定点j加入S中 这个过程直到S==V为止。3 这个过程所选的边,恰好就是最小生成树算法描述:void Prim(int n,Type * * c){ T = 空集; S = {1}; while(S != V) { (i,j)=i 属于 S 且 j属于V-S的最小权边; T = T∪{(i,j)}; S = S ∪ {j}; }}模版代码:template <class Typ... 阅读全文
posted @ 2012-10-20 12:04 xingoo 阅读(558) 评论(0) 推荐(0)
摘要: C 风格(C-style)强制转型如下:(T) exdivssion // cast exdivssion to be of type T函数风格(Function-style)强制转型使用这样的语法:T(exdivssion) // cast exdivssion to be of type T这两种形式之间没有本质上的不同,它纯粹就是一个把括号放在哪的问题。我把这两种形式称为旧风格(old-style)的强制转型。使用标准C++的类型转换符:static_cast、dynamic_cast、reinterdivt_cast、和const_cast。3.1static_cast用法:stat 阅读全文
posted @ 2012-10-20 11:19 xingoo 阅读(255) 评论(0) 推荐(0)
上一页 1 ··· 90 91 92 93 94 95 96 97 98 ··· 103 下一页