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]); } } }
待续。。