自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(15)
  • 收藏
  • 关注

原创 图的割点,割边

割点:算法:先深度优先遍历u点,然后判断不经过u点的情况下是否还能回到之前访问的任意一点。 再对v点进行一次深度优先遍历,看能不能回到祖先,能回到祖先,u不是割点,否则是割点。“`

2017-03-20 18:20:45 511

原创 八皇后问题:

思路:转自:八皇后 显然,每一行可以而且必须放一个皇后,所以n皇后问题的解可以用一个n元向量X=(x1,x2,…..xn)表示,其中,1≤ i≤ n且1≤ xi≤ n,即第n个皇后放在第i行第xi列上。由于两个皇后不能放在同一列上,所以,解向量X必须满足的约束条件为:xi≠ xj;若两个皇后的摆放位置分别是(i,xi)和(j,xj),在棋盘上斜率为-1的斜线上,满足条件i-j=xi-xj;在棋盘

2017-03-14 21:01:49 301

原创 转换算法(中文数字转阿拉伯数字)

题解: 1.权位:如一千二百三十 1的权位是千,节以万为节规则1:以10000为小节,小节的结尾即使是0,不使用0, 规则2:小节内两个非0的数之间使用0 规则3:当小节的千位事0,若小节的前一小节若无其他数字,则不用0,否则就要用0;代码:#include <iostream>#include <cstdio>#include <cstring>using namespace std;c

2017-03-09 09:52:56 1226

原创 最小编辑距离

今天在回顾一下动态规划问题: 动态规划分成四步: 1.定义最优子问题: 2。定义状态 3.定义决策和状态转换方程 4.确定边界条件:已编辑距离为例: 1。source[1..n]的字符转换为target[1…m]最小编辑次数,子问题:source[1..i],target[1..j]的最小编辑次数。 2,3状态方程 d[i][j] = d[i-1][j-1] //source[i-1

2017-03-05 22:25:33 334

原创 图的最小生成树

先介绍prim算法: 算法: 1,从任意一个顶点开始构造树,假设从1号点,首先将顶点1加入生成树,用一个以为数组book来标记哪些顶点加入了生成树 2.用数组dis记录生成树到各个顶点的距离,最初生成树只有1号顶点,有直连边时,数组dis存储就是1号顶点到该边的权值,没有直连边事

2017-03-02 20:51:14 293

原创 并查集

最近才知道并查集是分类用,以前太naive了,现在也很naive。并查集本质是维护一个森林,刚开使的时候,森林每个点是孤立的,也可以理解每个点是一个树,通过一个条件,将这些树合并成一个大树。并查集的主要两个是Union 和 find。 可以查看一下联通树的节点。代码:这里不是特别详细,以后会补充的#include #include using namespace std

2017-03-02 20:46:05 277

原创 建堆和堆排序

从小到大建立最大堆,不建立最小堆下面代码很清晰,是啊哈c中的代码,注释很好。 这里涉及建堆,向下压,堆排序。good code。 #include <iostream>#include <cstdio>using namespace std;int n,h[101];void swap(int x,int y){ int temp; temp = h[x]; h[x]=

2017-03-02 20:30:10 291

原创 Bellman-Ford -解决负权边

Dijkstra 算法终于理解,但是不能有负权边,让我们看看BellmanFord 核心代码:for(k=1;k<=n-1;k++) for(i=1;i<=m;i++) if(dis[v[i]] > dis[u[i]] + w[i]) dis[v[i]] = dis[u[i]] + w[i];上面的代码中,外循环一共循环乐n-1次,内循环循环了m次,。 第i

2017-03-02 20:06:21 273

原创 Dijkstra 算法-通过边实现松弛

一个点(源点) 到其余哥哥顶点的最短路径:单元最短路径。算法步骤如下: 1。将所有的顶点分为两部分:已知最短路程的顶点集合p和未知最短路径的集合顶点集合Q。最开始,已知最短路径的顶点集合p只有源点一个顶点,我们这里可以用一个book数组来记录哪些顶点在集合p中哪些顶点在集合Q中。book[i]=1,表示在p中,=0在Q中 2.设置源点S到自己的最短路径为0,级dis[s] = 0.若存在有源电能直

2017-03-02 19:40:12 382

原创 最短路径(Floyd-warshall)

求图中任意两点的最小距离: Floyd关键代码//关键算法for(int k=1;k<=n;k++) for(int i=1;i<=n;i++) for(int j=1;i<=n;i++) { if(e[i][j] > e[i][k]+e[k][j]) e[i][j] = e[i]

2017-03-02 19:03:15 320

原创 深度优先遍历,广度优先遍历

深度优先遍历思想:以一个未访问的节点为起始顶点,沿当前顶点的边走到位访问的顶点;当没有未访问的节点时回溯到上一个顶点,继续试探别的顶点。广度搜索: 一般建立一个队列。当所有边的权值相同的情况下,广度搜索的时间更快。

2017-03-02 18:53:43 362

原创 广度优先遍历

还是上面那道题: 深度遍历一般是用递归,深度不断增加,广度搜索一般用队列这样的形式存储东西;#include <iostream>#include <cstdio>using namespace std;struct note{ int x; int y; int f; int s};int main(){ struct note que[2501]

2017-03-02 18:31:23 394

原创 深度遍历

就以迷宫为例吧。代码如下://深度搜索:解救小哈#include <iostream>#include <cstdio>using namespace std;int a[51][51],book[51][51];int n,m,p,q,min = 99999999;//整个dfsvoid dfs(int x,int y,int step){ int next[4][2] = {

2017-03-02 18:04:02 277

原创 快速排序

快速排序: 首先找一个基准数: (参照的数,一般是第一个); 例如:6 1 2 7 9 3 4 5 10 8 算法过程:先从右往左找一个小于 6 的书,然后交换他们,可以用变量i,j分别指向序列的最左最又。修改过程回去看一下算法导论吧 代码如下:int Partition(int l,int r,vector<int> &a){ int temp = a[l]; int i=

2017-03-02 16:52:05 190

原创 桶排序

看完啊哈算法:这时候应该总结一波,感谢兵哥 桶排序:代码如下:#include <stdio.h>int main(){ int book[1001];//桶的个数 int i,j,t,n; for(i=0;i<=1000;i++) book[i] = 0; scanf("%d",&n);//输入n个数 for(i=1;i<=n;i++)

2017-03-02 16:24:25 227

空空如也

空空如也

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

TA关注的人

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