2013年8月17日

摘要: 迪杰斯特拉(Dijkstra)算法是求从某个源点到其余各顶点的最短路径,即对已知图 G=(V,E),给定源顶点 s∈V,找出 s 到图中其它各顶点的最短路径。我总结下核心算法,伪代码如下:Dijkstra(){ 初始化Dist、Path、final // 每次求得v0到某顶点v的最短路径 while (图的顶点数-1) { 1. 找到非最短路径顶点集中距V0最近的顶点v 得到其顶点下标和距离 将v加入到最短距离顶点集合中 打印相关内容 2. 依次修改其它未得到最短路径顶点的Dist[k]值 ... 阅读全文
posted @ 2013-08-17 22:58 RAUL_AC 阅读(480) 评论(0) 推荐(0) 编辑

2013年8月16日

摘要: Kruskal算法来构造最小生成树,我总结了分为以下步骤:(1)建图,构造Kruskal边集,边集元素应该包括该边的起始顶点、终止顶点、权值;(2)将边集按权值从小到大的顺序进行排序;(3)从小到大依次从Kruskal边集中取边加入最小生成树集合,判断条件:将该边加入最小生成树集合,与生成树集合中原有的边不构成环;(4)最小生成树集合中元素(构成生成树的边)的个数为原图顶点数-1时,代表最小生成树构造完毕。Kruskal核心伪代码如下:Kruskal(MGragh *Gra){ 对Kruskal边集按权值从小到大排序 for (边集) { // 判断边集中的边能... 阅读全文
posted @ 2013-08-16 22:03 RAUL_AC 阅读(1619) 评论(0) 推荐(0) 编辑

2013年8月15日

摘要: 要求:国际象棋的棋盘为N*N的方格棋盘,现将“马”放在任意指定的方格中,按照“马”走棋的规则将“马”进行移动。要求每个方格只能进入一次,最终使得“马”走遍棋盘N*N个方格。关于马的走法见下图:主要练习的是递归的思想,伪代码如下:DFS(int x, int y, int tag){ // 将该格子赋值为当前的步数 chess[x][y] = tag; // 保留原来数据x y 将x1 y1代入递归 int x1=x; int y1=y; // 结束条件 if (tag == 棋盘格子数){ return ture; } // ... 阅读全文
posted @ 2013-08-15 23:29 RAUL_AC 阅读(1203) 评论(0) 推荐(0) 编辑

2013年8月13日

摘要: 以上图为例,通过邻接矩阵的方式存储该图,并写出建立图和遍历图的代码``代码的实现比较简单和基础,主要用于巩固和复习数据结构相关知识。#include #include #define MAX_VERTEX_NUM 100#define MAX_VERTEX_NAMELEN 100typedef struct{ char name[MAX_VERTEX_NAMELEN];}VerType;// 图的邻接矩阵存储结构typedef struct{ int VertexNum,EdgeNum; // 顶点数,边数 VerType Ver... 阅读全文
posted @ 2013-08-13 22:43 RAUL_AC 阅读(748) 评论(0) 推荐(0) 编辑

2013年8月12日

摘要: 实现方案:1. 建立哈夫曼树(1)统计各个字符出现次数,按次数从小到大的顺序生成队列;(2)每次获取队列前两个节点(即队列中字符出现次数最少的两个),同时队头前移两位,将它们的字符出现次数相加,得到一个新节点,插入到队列合适位置;(3)当队列中仅剩一个节点时,哈夫曼树构造完毕,该节点即为树的根节点。2. 建立哈夫曼编码表(1)从哈夫曼树根开始遍历,遍历结束的同时编码表也构造完成,整个过程用递归实现,注意结束条件为遍历到叶子节点;(2)如果当时节点的左孩子不为空,则code[k]='0',递归遍历其左子树;(3)如果当时节点的右孩子不为空,则code[k]='1' 阅读全文
posted @ 2013-08-12 23:01 RAUL_AC 阅读(876) 评论(0) 推荐(0) 编辑
摘要: 为充分利用二叉树节点,引入线索二叉树,将左孩子指针为空时指向前驱,将右孩子指针为空时指向后继。输入:ABC``D``E`F``(`用空格替代)中序遍历结果:CBDAEF代码实现中的部分挺巧妙的,偶尔可以翻出来看看,琢磨琢磨。 1 #include 2 #include 3 4 // 线索存储标志位 5 // Link(0) 左右孩子 6 // Thread(1) 前驱后继 7 typedef enum{Link,Thread} TAG; 8 9 // 线索二叉树节点结构 10 typedef struct BiThrNode 11 { 12 char da... 阅读全文
posted @ 2013-08-12 00:33 RAUL_AC 阅读(553) 评论(0) 推荐(0) 编辑

2013年8月11日

摘要: 今天复习了二叉树的相关知识,写了点简单的二叉树建立和遍历的代码,作为备忘`` 1 #include 2 #include 3 4 #define MAX_TREENODE_NUM 100 5 6 // 二叉树节点结构 7 typedef struct bitnode 8 { 9 char data; // 节点存储的数据 10 struct bitnode *lchild; // 左孩子 11 struct bitnode *rchild; // 右孩子 12 }bitnode,*bitree;... 阅读全文
posted @ 2013-08-11 15:21 RAUL_AC 阅读(760) 评论(0) 推荐(0) 编辑

导航