现在的位置: 首页 > 综合 > 正文

小小知识

2018年01月17日 ⁄ 综合 ⁄ 共 1000字 ⁄ 字号 评论关闭

8个方向的搜索

int dx[8] = {-2, -2, -1, -1, 1, 1, 2, 2};
int dy[8] = {-1, 1, -2, 2, -2, 2, -1, 1};
点击打开链接
取石子的游戏  有关博弈  点击打开链接

二维树状数组

 



KMP算法

计算next[];                       匹配

KMP详解  点击打开链接
优先队列  
struct node
{
    int num,time,pp;
    bool operator <(const node&t) const{
    return time>t.time||(time==t.time&&num>t.num);优先级别高的先出。。
    }
};
建树方法。。
前序遍历,也叫先根遍历,遍历的顺序是,根,左子树,右子树中序遍历,也叫中跟遍历,顺序是 左子树,根,右子树后序遍历,也叫后跟遍历,遍历顺序,左子树,右子树,根。。

scanf("%c%*c",&s);加了星号 (*) 表示跳过此数据不读入. (也就是不把此数据读入参数中)

boolean next_permutation(a.begin(),a.end())
 
该函数是以输入字符串中的字符所构建的按字典顺序全排列中,判断当前字符串之后是否还有下一个字符串
如果next_permutation的执行次数少于全排列的个数,返回true
例如 a="abc" 全排列有 "abc" "acb" "bac" "bca" "cab" "cba";
执行一次next_permutation 返回true a变成 "acb"
再执行一次next_permutation 返回true a变成 "bac"
...
当执行到a="cba" 时 由于这已经是全排列的最后一个字符串,所以 再次执行next_permutation 则返回false

最短路dijkstra 模板
void dijkstra(int s,int t){
	for(int i=1;i<=n;++i)mark[i]=false;
	mark[s]=true;
	while(1){
		int point=t;
		for(int i=1;i<=n;++i){
			if(!mark[i] && dist[s][i]<dist[s][point])point=i;
		}
		if(point == t)return;
		mark[point]=true;
		for(int i=1;i<=n;++i){
			if(!mark[i])dist[s][i]=min(dist[s][i],dist[s][point]+dist[point][i]);
		}
	}
}



待续。。

抱歉!评论已关闭.