#include<stdio.h> #include<stdlib.h> int maze[5][5]; int mark[5][5]={0}; typedef struct{ int x; int y; }offset; offset direct[8] = {-1,0, -1,-1, 0,-1, 1,-1, 1,0, 1,1, 0,1, -1,1}; //8个方向 typedef struct{ int x; int y; int direct; }element; element stack[26]; void add(int *top,element position); element delete(int *top); int main() { int entry_x, entry_y; int exit_x, exit_y; printf("请输入入口:"); scanf(" %d%d",&entry_x 继续阅读 >>


陈文浩 18/01/15 22:15:32
/* * 用prim算法弄最小生成树,每次一个点都会遍历所有点,找出,两点距离最短的情况 * 再改变节点的入度和最小值 */ #include<stdio.h> #include<stdlib.h> #include<string.h> #define INFINITY 1000 struct{ int adjvex; int lowcost; }closedge[31]; typedef struct { int vexnum; int arcs[11][11]; }AdjMatrix; AdjMatrix *G; void prim(AdjMatrix *G,int start); int main() { printf("请输入矩阵:"); G = (AdjMatrix *)malloc(sizeof(AdjMatrix)); for(int i=1;i<=10;i++) for(int j=1;j<=10;j++) s 继续阅读 >>


陈文浩 18/01/15 15:14:37
kruskal算法的一点就是不能形成环路,而且是从排列好的边集合依次选出最小的边,每次选出的顶点都要放在同一个边集合中,之后在顶点集合选两个顶点的边,要求这两个顶点不能在边集合中,这样才能保障不形成环路。 一、链表表示 #include<stdio.h> #include<stdlib.h> /* kruskal,最小生成树,利用链表,并查集的知识 */ typedef struct{ int bef; int aft; int weight; }pic_node;//图中点的结构体 typedef struct find_set{ int data; struct find_set *next; }NODE;//点集合的节点 typedef struct set_head{ NODE *head; NODE *tail; int flag; }HEAD;//点集合的头 HEAD set[20];//点集合 pic_node arr[20];//开始时候数据 int edge 继续阅读 >>


陈文浩 18/01/15 15:08:38
#include<iostream> #include<vector> using namespace std; void shellsort(vector<int> &arr); int main() { vector<int> arr{0,9,8,7,6,5,4,3,2,1}; shellsort(arr); for(auto i = arr.begin() + 1;i!=arr.end();i++) cout << *i <<" "; } void shellsort(vector<int> &arr) { int i,j; int increment = arr.size(); do{ increment = increment / 3 + 1;//增量 for(int i = increment + 1;i < arr.size();i++)//之后和冒泡差不多 继续阅读 >>


陈文浩 18/01/14 21:55:44
java有可以获得数组大小的函数,但是c++没有,在写函数的时候发现了一些问题,就是传数组名的时候,会在函数中将数组退化成指针,得不到想要的结果,使用引用之后就不会有这样的问题 #include<iostream> #include<typeinfo> #include<vector> using namespace std; // 使用 int[] template <typename T> inline int get_array_len(T &p) { return sizeof(T) / sizeof(*p); } void insertsort(int arr[], int n) { int j = 0; for(int i = 2; i < n; i++) { if(arr[i] < arr[i-1]) { arr[0] = arr[i]; for(j = i-1; arr[0] < 继续阅读 >>


陈文浩 18/01/14 20:33:26
Acceptor 用于 accept 一个 TCP 连接,accept 接受成功后通知 TCP 连接的使用者。Acceptor 主要是供 TcpServer 使用的,其生命期由后者控制。一个 Acceptor 相当于持有服务端的一个 socket 描述符,该 socket 可以 accept 多个 TCP 客户连接,这个 accept 操作就是 Acceptor 实现的。 这里用到了一些封装好的 socket 和地址结构,如 class InetAddress 表示 sockaddr_in 的封装,如可以通过ip地址和port端口生成一个sockaddr_in; class Socket封装了部分关于socket套接字的操作,如Socket::bindAddress(InetAddress&) 将socket和一个sockaddr_in地址绑定,Socket::accept(InetAddress& peerAddr)将一个socket允许连接一个客户端地址peerAddr,Socket::listen()监听socket,Socket::shutdownWrite 继续阅读 >>


杜肖孟 18/01/12 22:43:03
由于我将继承与多态的讲解分成了三篇博客,所以在这篇博客给出三篇博客总的链接,阅读顺序由第一篇至第三篇就可以。 第一篇:主要讲解分派:JVM–详解虚拟机字节码执行引擎之静态链接、动态链接与分派 第二篇:主要讲解invokevirtual指令:JVM–从JVM层面深入解析对象实例化、多态性实现机制 第三篇:主要讲解继承与方法表: JVM–再谈继承与多态 相信这三篇博客会给你带来惊喜~~~作者:championhengyi发表于2018/1/12 14:53:43 原文链接 阅读:57评论:0查看评论 继续阅读 >>


董恒毅 18/01/12 14:53:43
一. 背景 Make是最常用的构建工具,诞生于1977年,主要用于C语言的项目。但是实际上 ,任何只要某个文件有变化,就要重新构建 的项目,都可以用Make构建。 make只是一个根据指定的Shell命令进行构建的工具。它的规则很简单,你规定要构建哪个文件、它依赖哪些源文件,当那些 文件有变动时,如何重新构建它。 二. Make Make是一个很简单命令. make . //构建当前目录 但先编译哪个文件,哪个文件为哪个文件的依赖,都在一个名为Makefile的文件中描述,接下来看一下Makefile文件. 三. Makefile 3.1组成 <target> : <prerequisites> [tab] <commands> <目标> : <前置条件> [tab] <命令> 上面第一行冒号前面的部分,叫做"目标"(target),冒号后面的部分叫做"前置条件"(prerequisites);第二行必须 由一个tab键起首,后面跟着"命令"(comma 继续阅读 >>


楚东方 18/01/12 12:49:41
手动管理的弊端 在简单的程序中,我们不大可能忘记释放 new 出来的指针,但是随着程序规模的增大,我们忘了 delete 的概率也随之增大。在 C++ 中 new 出来的指针,赋值意味着引用的传递,当赋值运算符同时展现出“值拷贝”和“引用传递”两种截然不同的语义时,就很容易导致“内存泄漏”。 手动管理内存带来的更严重的问题是,内存究竟要由谁来分配和释放呢?指针的赋值将同一对象的引用散播到程序各处,但是该对象的释放却只能发生一次。当在代码中用完了一个资源指针,该不该释放 delete 掉它?这个资源极有可能同时被多个对象拥有着,而这些对象中的任何一个都有可能在之后使用该资源,其余指向这个对象的指针就变成了“野指针”;那如果不 delete 呢?也许你就是这个资源指针的唯一使用者,如果你用完不 delete,内存就泄漏了。 资源的拥有者是系统,当我们需要时便向系统申请资源,当我们不需要时就让系统自己收回去(Garbage Collection)。当我们自己处理的时候,就容易出现各种各样的问题。 C++ 中的智能指针 为了让用户免去手动 delete 资源的烦恼,不少类库采用了 继续阅读 >>


杜肖孟 18/01/11 23:39:30
import java.util.*; public class Main { public static void main(String[] args){ Random random = new Random(10);//随机种子 for(int i=0;i < 10;i++){ System.out.println(random.nextInt(1000));//nextInt可以规定范围 } } } 作者:m0_37787222发表于2018/1/10 22:48:12 原文链接 阅读:2评论:0查看评论 继续阅读 >>


陈文浩 18/01/10 22:48:12