随笔分类 - 算法数据结构
摘要:转自:http://www.gameres.com/thread_256279_1_1.htmlGameRes发布,文/paladin_t,转载请注明GameRes和作者追击、群聚是极常用到的敌人行为模式。靠拢玩家位置的移动叫追击;群聚指一批敌人集体采用统一的行动,就像一群群沙丁鱼一样。群聚敌人往往...
阅读全文
摘要:LOD(Level Of Detail)是3D渲染中用到的概念,按照wikipedia上的翻译,可以译为“细节层次”,它是一种根据与观察点的距离,来减低物体或者模型的复杂度来提升渲染效率的优化技术,因为显而易见的是,当一个物体离我们很远的时候,我们不需要用很复杂的多边形来绘制,只要用一个粗略模型或者低精度的贴图即可,所以在3D渲染中,这是一个很常见的优化技术。对于AI来说,当一个AI对象离我们很远的时候,其实,它做出什么样的决策,做出什么样的行为,我们并不能“感觉的”到,虽然它的行为可能会对游戏世界有影响,但玩家一般只会专注于离自己比较近的AI行为,所以我们在AI的优化中,也可以采用这种“LO
阅读全文
摘要:http://www.cnblogs.com/mavaL/archive/2013/04/07/3001860.html
阅读全文
摘要:转自:http://www.cnblogs.com/konlil/archive/2011/04/23/2025954.html如果要让游戏里的角色或者NPC能执行预设的AI逻辑,最简单的用IF..ELSE...神器既可以实现,但是再复杂的一般用经典的状态机来切换状态,但是编辑器写起来比较麻烦。相对的,行为树(Behavior Tree)理解和编辑起来就非常简单了。行为树,其实也是一种有限状态机,只不过形式上分层呈树结构,人称分层有限状态机(HFSM)。行为树主要用四种节点(还有诸如:装饰节点等其他能更丰富功能的节点)来描述行为逻辑,顺序节点、选择节点、条件节点、执行节点。每一棵行为树表示一个
阅读全文
摘要:1、如何判断一个链表是不是这类链表? 2、如果链表为存在环,如果找到环的入口点?解答:一、判断链表是否存在环,办法为:设置两个指针(fast, slow),初始值都指向头,slow每次前进一步,fast每次前进二步,如果链表存在环,则fast必定先进入环,而slow后进入环,两个指针必定相遇。(当然,fast先行头到尾部为NULL,则为无环链表)程序如下:bool IsExitsLoop(slist *head){ slist *slow = head, *fast = head; while ( fast && fast->next ) { slow = slow-&g
阅读全文
摘要:转自:http://fei-cool.blog.sohu.com/152000311.html 这几天笔试了好几次了,连续碰到一个关于常见排序算法稳定性判别的问题,往往还是多选,对于我以及和我一样拿不准的同学可不是一个能轻易下结论的题目,当然如果你笔试之前已经记住了数据结构书上哪些是稳定的,哪些不是稳定的,做起来应该可以轻松搞定。本文是针对老是记不住这个或者想真正明白到底为什么是稳定或者不稳定的人准备的。 首先,排序算法的稳定性大家应该都知道,通俗地讲就是能保证排序前2个相等的数其在序列的前后位置顺序和排序后它们两个的前后位置顺序相同。在简单形式化一下,如果Ai = Aj, Ai原来在位置前,
阅读全文
摘要:在一个具有几个顶点的连通图G中,如果存在子图G'包含G中所有顶点和一部分边,且不形成回路,则称G'为图G的生成树,代价最小生成树则称为最小生成树。 许多应用问题都是一个求无向连通图的最小生成树问题。例如:要在n个城市之间铺设光缆,主要目标是要使这 n 个城市的任意两个之间都可以通信,但铺设光缆的费用很高,且各个城市之间铺设光缆的费用不同;另一个目标是要使铺设光缆的总费用最低。这就需要找到带权的最小生成树。 性质最小生成树的边数必然是顶点数减一,|E| = |V| - 1。最小生成树不可以有循环。最小生成树不必是唯一的。Prim算法与Kruskal算法是寻找最小生成树的经典方法。
阅读全文
摘要:堆排序(Heapsort)是指利用堆这种数据结构所设计的一种排序算法。堆是一个近似完全二叉树的结构,并同时满足堆性质:即子结点的键值或索引总是小于(或者大于)它的父节点。堆节点的访问通常堆是通过一维数组来实现的。在起始阵列为 0 的情形中:堆的根节点(即堆积树的最大值)存放在阵列位置 1 的地方; 注意:不使用位置 0,否则左子树永远为 0[2]父节点i的左子节点在位置 (2*i);父节点i的右子节点在位置 (2*i+1);子节点i的父节点在位置 floor(i/2);对vector中的数据进行堆排序: 1 #include <iostream> 2 #include <ve
阅读全文
摘要:教你如何迅速秒杀掉:99%的海量数据处理面试题作者:July出处:结构之法算法之道blog前言 一般而言,标题含有“秒杀”,“99%”,“史上最全/最强”等词汇的往往都脱不了哗众取宠之嫌,但进一步来讲,如果读者读罢此文,却无任何收获,那么,我也甘愿背负这样的罪名,:-),同时,此文可以看做是对这篇文章:十道海量数据处理面试题与十个方法大总结的一般抽象性总结。 毕竟受文章和理论之限,本文将摒弃绝大部分的细节,只谈方法/模式论,且注重用最通俗最直白的语言阐述相关问题。最后,有一点必须强调的是,全文行文是基于面试题的分析基础之上的,具体实践过程中,还是得具体情况具体分析,且场景也远比本文所述的任..
阅读全文
摘要:全排列算法:#include<iostream>using namespace std;template <class Type>void Perm(Type list[], int k, int m){ if(k==m) { for(int i=0; i<=m; i++) cout << list[i]; cout << endl; } else for(int j=k; j<=m; j++) { Swap(list[k],list[j]); Perm(list, k+1, m); Swap(list[k],list[j]); }}
阅读全文
摘要:算法编程题:1、给定一个字符串,求出其最长的重复子串。思路:使用后缀数组,对一个字符串生成相应的后缀数组后,然后再排序,排完序依次检测相邻的两个字符串的开头公共部分。这样的时间复杂度为:生成后缀数组 O(N)排序 O(NlogN*N) 最后面的 N 是因为字符串比较也是 O(N)依次检测相邻的两个字符串 O(N * N)总的时间复杂度是 O(N^2*logN),解答:对于类似从给定的文本中,查找其中最长的重复子字符串的问题,可以采用“后缀数组”来高效地完成此任务。后缀数组使用文本本身和n个附加指针(与文本数组相应的指针数组)来表示输入文本中的n个字符的每个子字符串。 首先,如果输入字符串存储在
阅读全文
摘要:#include <iostream>#include <math.h>#include <malloc.h>using namespace std;int *position; //放置的位置int queen; //皇后数目int count; //第N种可能性//判断第n行是否放置皇后bool SignPoint(int n){for (int i=0;i<n;i++){ if (position[i] == position[n]) //该列已经放置过皇后了 return false; if (abs(position[i] - positio
阅读全文
摘要:很多学软件的朋友需要做C语言链表应用的课程设计,下面是我写的代码,希望对需要的人有些帮助。。。希望和大家交流一下,更希望高手指点。。已经经过(turboC 2.0编译通过)。#include <stdio.h>#include <stdlib.h>#define LEN sizeof(struct student)#define NULL 0struct student { int number; int score; struct student*next;};struct student*create() { struct s...
阅读全文
摘要:#include#includemain(){ int *p,count; scanf("%d",&count); p=(int*)malloc(count*sizeof(int)); for(int i=0;i p[i]=i; for(int j=0;j printf("%d",p[j]);}
阅读全文
摘要:通过动态内存分配实现c语言动态指针"数组".其实这种结构并非是一种数组,只是手动实现的一种类似数组的结构,实现类似数组的功能。应该可以说是一种伪数组结构吧。#include <stdio.h>#include <stdlib.h>main(){ char**p; int count,j,i; p=0; scanf("%d",&count); p=(char**)calloc(count,sizeof(char*)); for(j=0;j<count;j++) p[j]=(char*)malloc(10*sizeof(
阅读全文
摘要:#include <stdio.h>#include <stdlib.h>#define SHI sizeof(struct duoxiangshi)#define NULL 0struct duoxiangshi{int xishu,zhishu; struct duoxiangshi*next;};struct duoxiangshi*create() {struct duoxiangshi*head,*p1,*p2; int n; n=0; head=NULL; p2=NULL; p1=NULL; p1=(struct duoxiangshi*)mal...
阅读全文
摘要:接口文件poly.h#ifndef POLY_H#define POLY_H#include <iostream>#include <cstdlib>#include <cstddef>using namespace std;typedef int* intptr;class poly{public: poly(); poly(int a); poly(const poly& p); ~poly(); void creat(); friend poly operator +(const poly& p1,const poly& p2)
阅读全文
摘要:【问题描述】马的遍历问题。在8×8方格的棋盘上,从任意指定方格出发,为马寻找一条走遍棋盘每一格并且只经过一次的一条路径。【初步设计】首先这是一个搜索问题,运用深度优先搜索进行求解。算法如下:1、输入初始位置坐标x,y;2、步骤 c: 如果c>64输出一个解,返回上一步骤c--(x,y) ← c计算(x,y)的八个方位的子结点,选出那此可行的子结点循环遍历所有可行子结点,步骤c++重复2显然(2)是一个递归调用的过程,大致如下:void dfs(int x,int y,int count){ int i,tx,ty;if(count>N*N) { output_so...
阅读全文
摘要:#include <iostream.h>int board [8][8]={0};int Htry1[8]={-2,-1,1,2,2,1,-1,-2};int Htry2[8]={1,2,2,1,-1,-2,-2,-1};bool chech[8][8]={0};//标记位置是否已经被占用int n=1;//就算已走的步数void findway(int i,int j){for(int z=0;z<8;z++){if(i+Htry1[z]>=0&&i+Htry1[z]<8&&j+Htry2[z]>=0&&j
阅读全文
摘要:#include <iostream.h>struct point{int x,y;//马的位置int dir;//这一次马行走的方向};struct stack{point p[64];//存储马的位置,方便回溯};int board [8][8];int Htry1[8]={-2,-1,1,2,2,1,-1,-2};int Htry2[8]={1,2,2,1,-1,-2,-2,-1};bool chech[8][8]={0};//标记位置是否已经被占用int main(){int i,j;int top=0;int z; cout<<"请输入马的初始位置&
阅读全文