自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(35)
  • 资源 (1)
  • 收藏
  • 关注

原创 A*算法的原理和实现

一:A*的介绍A*算法是一种启发式搜索算法,就是在状态空间中的搜索对每一个搜索的位置进行评估,得到最好的位置,再从这个位置进行搜索直到目标。这样可以省略大量无畏的搜索路径,提到了效率。在启发式搜索中,对位置的估价是十分重要的。采用了不同的估价可以有不同的效果。该算法可以用公式f(n)=g(n)+h(n)表示,其中 f(n) 是从初始点经由节点n到目标点的估价函数,g(n) 是在状态

2014-12-14 06:48:12 4749

原创 Floyd算法的原理和实现

一.算法介绍Floyd算法是一种在有向图中求最短路径的算法。相比不能再有向图中包含负权值的dijkstra算法,Floyd算法可以用在拥有负权值的有向图中求解最短路径(不过不能包含负权回路)。它是一种求解有向图中点与点之间最短路径的算法。我们检查有向图中的每一个节点X,对于图中过的2点A和B,如果有Dis(AX)+Dis(XB)所以,核心代码很简单,其中N是顶点个数,时间复杂度为O(N

2014-12-14 04:26:13 9410 1

原创 用BFS解决迷宫问题

在一个n*n的矩阵里走,从原点(0,0)开始走到终点(n-1,n-1),只能上下左右4个方向走,只能在给定的矩阵里走,求最短步数。n*n是01矩阵,0代表该格子没有障碍,为1表示有障碍物。int mazeArr[maxn][maxn]; //表示的是01矩阵int stepArr[4][2] = {{-1,0},{1,0},{0,-1},{0,1}}; //表示上下左右4个方向

2014-10-03 06:28:56 2685 4

原创 如何实现广度优先遍历(BFS)

BFS过程:一:访问顶点V,并标记V为已经访问二:顶点V入队列三:如果队列非空,进行执行,否则算法结束四:出队列取得对头顶点u,如果顶点未被访问,就访问该顶点,并标记该顶点为已经访问五:查找u的第一个邻接节点w六:如果w不存在,则转到步骤三,否则循环执行a. 如果w没有被访问过,则先把w入队列b.查找顶点u的下一个邻接节点,记为w,并转到步骤六上图使用B

2014-10-03 00:17:18 1273

原创 如何实现深度优先遍历(DFS)

DFS实现步骤如下:①访问顶点V,并标记V已经访问②查找V的第一个邻接顶点w③若W存在,则继续执行,否则算法结束④若W未被访问,则使用DFS递归访问w⑤查找V的下一个邻接节点,并记为W,转到步骤③对上图进行DFS,则访问顺序为A B D C E使用伪代码如下:Vector G[maxn]int vis[maxn]void dfs(int u)

2014-10-02 23:41:59 1105

原创 图的邻接矩阵存储结构

如上图,我们可以把v0标记为0,v1标记为1。。。。并把联通的2点权值全设置为1,那么可以用邻接矩阵(右图)来表示概念解析:第一个邻接顶点:我们以vo为例,第一个邻接顶点为V1(其实也可以使V3,只不过考虑计算机的存储顺序,我们找邻接顶点,一般是从v0扫描到v3,所以我们先在内存中扫描到v1)下一个邻接顶点:我们以v0为例,下一个邻接顶点就是v3(同样,其实也可以使V1,只

2014-10-02 23:34:36 1431

原创 POJ 1979 Red and Black (深度优先遍历)

Red and BlackTime Limit: 1000MS Memory Limit: 30000KTotal Submissions: 22768 Accepted: 12286DescriptionThere is a rectangular room, covered with square tiles. Eac

2014-10-02 22:51:05 1116

原创 直接插入排序(递归与非递归2种实现方法)

一个数组有n个元素,假如前面n-1个元素已经排序好了,那么把第n个元素插入到前面n-1个元素,使得数组有序排列,就是插入排序了。至于n-1个元素如何已经先排序好,那么我们可以假设前面n-2个元素已经排序好,把第n-1个元素插入到前面n-2个元素。依次类推,直到只剩下一个元素,也就是第一个元素。排序完成。代码如下:#includeusing namespace std;

2014-09-30 06:58:11 7714

原创 快速排序(递归与分治的思想)

快排具有递归和分治的思想,实现步骤如下。第一步:对数组A中的第一个元素x执行操作,使得数组变成新的数组B,B中C段表示小于x的元素,D段表示大于x的元素第二步:把C段,D段,当成2个独立的数组,然后对这2个数组执行类似于第一步中A的操作第三步:这样B和D数组又同样被分成了三部分,依次类推反复执行相同的操作。代码:#includeusing namespace std;

2014-09-30 06:40:15 1651

原创 堆排序

堆排序

2014-09-30 05:33:58 6552 1

原创 二路归并排序(也叫合并排序)

下面这图展示了二路归并的过程

2014-09-29 02:08:36 3163

原创 基数排序(采用链表)

基数排序

2014-09-29 01:33:11 6784 2

原创 堆栈的链式表示和实现

#includeusing namespace std;typedef char DataType; //记得加分号typedef struct snode{ DataType x; struct snode *next;}SNode; void Initiate(SNode **head) { (*head)=(SNode*)malloc(sizeof(SNode));

2014-09-27 23:04:52 666

原创 如何实现堆栈

#includeusing namespace std;#define Size 100typedef struct stack{ char s[Size]; int top;}Stack;void Initiate(Stack *a){ a->top=0;}//入栈成功返回1,否则返回0int StackPush(Stack *a,char x){ if(a-

2014-09-27 21:22:00 534

原创 编程实现链式队列

#includeusing namespace std;typedef struct Node{ char a; struct Node *next;}Lnode;typedef struct Queue{ Lnode *front; Lnode *rear;}LQueue;//初始化,实参传入a的地址void Initiate(LQueue *a){ a->f

2014-09-27 20:29:12 605

原创 编程判断一个树是完全二叉树(使用层次遍历实现)

完全二叉树:一棵具有N个节点的二叉树的结构与满二叉树的前N个节点的结构相同如何判断一个树是完全二叉树可以使用层序遍历,只需2个步骤第一步:如果遍历到一个节点只有右子树没有左子树,则不是完全二叉树第二部:如果遍历到一个节点只有左子树,那么后面遍历到的节点必须是叶子节点,否则也不是完全二叉树排除以上两种情况,则树是完全二叉树核心代码://层序遍历int L

2014-09-27 20:22:24 3744

原创 如何实现二叉树层次遍历

完整#includeusing namespace std;typedef struct biTreeNode{ char data; struct biTreeNode *LChild; struct biTreeNode *RChild;}BiTreeNode;void Initiate_Tree(BiTreeNode **head){ (*head)=(BiTr

2014-09-26 22:47:10 5033

原创 如何求2叉树叶子节点(递归)

核心代码:int leaf(BiTreeNode *head){ if(head==NULL) return 0; else { if(head->LeftChild==NULL && head->RightChild==NULL) return 1; else return leaf(head->RightChild)+leaf(head->LeftChild);

2014-09-26 16:31:29 621

原创 循环队列的实现

#includeusing namespace std;#define Size 5typedef struct RCQueue{ char RQ[Size]; int front; int rear; int cout;}RQueue;void Initiate(RQueue * a){ a->cout=0; a->front=0; a->rear=0;}in

2014-09-26 15:41:28 406

原创 (面试)C语言指针程序改错题

改错题第一道:

2014-09-25 02:53:53 3148

原创 如何求二叉树的高度(递归实现)

核心代码完整代码:#include#includeusing namespace std; typedef struct Lnode{ char data; struct Lnode *LeftChild; struct Lnode *RightChild;}BiTreeNode;void Initiate(BiTreeNode **head){

2014-09-24 23:35:36 1440

原创 二叉树的创建和前序,中序,后序遍历

代码如下:使用指针的指针初始化#include#includeusing namespace std; typedef struct Lnode{ char data; struct Lnode *LeftChild; struct Lnode *RightChild;}BiTreeNode;//*head表示指向申请的内存区的指针void Initiate(B

2014-09-24 22:13:32 530

原创 linux进程控制---wait()使用方法

进程调用wait()后,就堵塞了自己。

2014-09-16 00:10:42 1399

原创 深入理解操作系统的管程,进程,线程(二)

1.进程间的通信(inter-process communication,IPC)有三点需要注意:一:一个作业通常被分为若干个能并发执行的进程二:这些进程以各自独立的速度向前推进,但是他们能保持通信,以便协调一致的(同步)完成任务。三:进程的通信就是进程间互相传递数据。  进程之间的通信分2种。(1)低级通信。控制信息的传递,一般只传递一个或者几个字节的信息,以达到

2014-09-15 20:54:17 1349

原创 深入理解l操作系统的管程,进程,线程(一)

1.管程(monitors)的引入和定义

2014-09-15 05:36:35 4844

原创 linux下VIM编译器的使用

打开terminal终端,然后输入 vim  test.c输入

2014-09-14 05:46:08 452

原创 链表的冒泡排序

#includeusing namespace std;typedef struct head{ int a; struct head *next;}NLode;void intial(NLode **head){ *head=(NLode *)malloc(sizeof(NLode)); (*head)->next=NULL;}void insert(NLode

2014-08-27 00:51:48 464

原创 链表翻转

#includeusing namespace std;typedef struct head{ int a; struct head *next;}NLode;void intial(NLode **head){ *head=(NLode *)malloc(sizeof(NLode)); (*head)->next=NULL;}void insert(NLode

2014-08-27 00:36:21 438

原创 2个有序链表的合并

#includeusing namespace std;typedef struct head{ int a; struct head *next;}NLode;void intial(NLode **head){ *head=(NLode *)malloc(sizeof(NLode)); (*head)->next=NULL;}void insert(NLode

2014-08-27 00:30:57 431

原创 带头结点链表的实现

#includeusing namespace std;typedef struct head{ int a; struct head *next;}NLode;void intial(NLode **head){ *head=(NLode *)malloc(sizeof(NLode)); (*head)->next=NULL;}void insert(NLode

2014-08-27 00:27:27 469

原创 js------数组

添加数组元素方法:unshift();push();splice(index,0,E1,E1,..........)          //the second paremeter must be o无标题文档 var arr=new Array(1,2,3); arr.unshift(-1,0);//在数组的头部插入2个元素

2014-03-31 21:54:43 527

原创 HDU 1233 (最小生成树) 用并查集实现kruskal

题目很简单,不过有些细节要注意#include#includeusing namespace std;#define MAX 10000struct edge1{ int x,y; int weigh;}edge[MAX];int father[MAX];bool cmp(edge1 a, edge1 b) { return

2014-03-25 13:12:18 561

原创 JS----日期对象

获取日期对象中的指定部分,js1.6开始加入toLocaleFormat的方法,但是IE只支持JS1.3,所以不支持此方法:无标题文档 var now=new Date(); //得到系统当前时间 var strDate=now.getFullYear()+"-"+now.getMonth()+"-"+now.getDate(); var strTi

2014-03-24 22:10:35 745

原创 HDU 3038 how many answers are wrong(带权并查集)

很简单的题,找出各个节点与根节点的关系,并与输入的权值进行比较#includeusing namespace std;#define MAX 200005struct num{ int father; int relationship;}num[MAX];void make_set(int N){ for(int i=0;i<=N;i++) { num[i].fa

2014-03-24 04:39:44 486

原创 POJ 1733 parity game (hash离散+并查集)

#includeusing namespace std;#define N 5005/*hash+离散化===================================================================================*/struct node{ int val; int next;}E[N];int v[N], cnt=

2014-03-24 04:03:22 690

日程备忘录源代码

日程备忘录的源代码,亲测可以运行

2015-06-04

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除