随笔分类 -  知识储备

上一页 1 2 3 下一页
图的三种存储方式
摘要:之前总结过一次。详见本博客或者是另一篇。不过呢。写起来。还是今天的简单易写(学长教的)。测试数据my.txt.邻接矩阵:#include <stdio.h>#include <stdlib.h>#include <string.h>#define MAXN 100const int INF = (1<<23);int G[MAXN][MAXN];int main(){ //freopen("d:\\my.txt", "r", stdin); int n, m, i, j, u, v, w; scanf(&q 阅读全文
posted @ 2013-02-22 10:37 Still_Raining 阅读(1271) 评论(0) 推荐(0)
辗转相除法证明
摘要:摘自百度百科:设两数为a、b(b<a),用gcd(a,b)表示a,b的最大公约数,r=a mod b 为a除以b以后的余数,k为a除以b的商,即a÷b=k.......r。辗转相除法即是要证明gcd(a,b)=gcd(b,r)。第一步:令c=gcd(a,b),则设a=mc,b=nc第二步:根据前提可知r =a-kb=mc-knc=(m-kn)c第三步:根据第二步结果可知c也是r的因数第四步:可以断定m-kn与n互素【否则,可设m-kn=xd,n=yd,(d>1),则m=kn+xd=kyd+xd=(ky+x)d,则a=mc=(ky+x)dc,b=nc=ycd,故a与b最大公 阅读全文
posted @ 2013-02-22 08:37 Still_Raining 阅读(260) 评论(0) 推荐(0)
树的中序遍历(非递归)
摘要:第一种:Tree q[MAXN];void InOrderTraverse(Tree T){ int top = 0; Tree p = T; while(p || top != 0){ if(p) {q[top++] = p; p = p->lchild;}//根指针进栈,遍历左子树 else{ //根指针退栈,访问根结点,遍历右子树 p = q[--top]; printf("%c", p->data); p = p->rchild; } }}第二种:Tr... 阅读全文
posted @ 2013-02-19 15:08 Still_Raining 阅读(188) 评论(0) 推荐(0)
SDUT2132算术表达式转换成后缀式(表达式树)
摘要:题目链接。解题报告:这是很久前做的了。。又扒出来了。。怕再忘了嘛。。很简单。建立表达式树,然后后序遍历。代码如下:#include <stdio.h> #include <stdlib.h> #include <string.h> #include <ctype.h> #define MAXN 200 int comp(char a, char b); int st1[MAXN], st2[MAXN]; int main(){ int top1 = 0, top2 = 0, i=0; char s[MAXN]; scanf("%s&qu 阅读全文
posted @ 2013-02-19 09:33 Still_Raining 阅读(500) 评论(0) 推荐(0)
HDU1162Eddy's picture(最小生成树)
摘要:题目链接。解题报告:用了两个方法。。一个是Kruskal, 一个是prim。对于本题。。还是prim写起来容易点。。Kruskal:prim:。。直接上代码Kruskal AC代码:#include <stdio.h>#include <stdlib.h>#include <math.h>#define MAXN 100typedef struct Pointer{ double x, y;}Pointer;struct Num{ int x, y; double dis;}num[MAXN*(MAXN-1)/2];Pointer pos[MAXN];int 阅读全文
posted @ 2013-02-15 20:24 Still_Raining 阅读(209) 评论(0) 推荐(0)
HDU1285确定比赛名次(拓扑排序)
摘要:题目链接解题报告:这题小意思。。啦 啦啦#include <stdio.h>#include <string.h>#define MAXN 600int n, m, indegree[MAXN], G[MAXN][MAXN], q[MAXN];int toposort(){ int i, j, k; i=0; while(i<n){ for(j=1; j<=n; j++){ if(indegree[j] == 0){ indegree[j]--; q[i++] = j; ... 阅读全文
posted @ 2013-02-14 16:05 Still_Raining 阅读(1084) 评论(0) 推荐(0)
拓扑排序
摘要:#include <stdio.h>#include <stdlib.h>#include <string.h>#define MAXN 91int v[MAXN], n, t, q[MAXN], G[MAXN][MAXN];int dfs(int i){ v[i] = -1; int j; for(j=1; j<=n; j++) if(G[i][j]){ if(v[j]<0) return 0; //发现环 if(!v[j] && !dfs(j)) return 0; } q[t--] = i; v[i] = 1; //加到.. 阅读全文
posted @ 2013-02-14 13:12 Still_Raining 阅读(187) 评论(0) 推荐(0)
HDU2602Bone Collector(DP,0/1背包)
摘要:题目连接解题报告:结合算法竞赛入门经典(刘汝佳), 算法设计与分析(郑宗汉,郑晓明)花了一天才算弄懂0/1背包思想,当然仅仅是入门而已给定一个载重量为M, n个重量为wi,价值为pi的物体,1<=i<=n, 每个物品xi都有两种状态,即放入(0)和不放入(1),即xi=0或xi=1使得价值最大。状态转移方程为f[i][j]=max{f[i-1][j],f[i-1][v-w[i]]+p[i]}一篇博客介绍的相当不错。(里面介绍的思路(设的变量名称可能会不一样):问题的特点是:每种物品一件,可以选择放1或不放0。用子问题定义状态:即f[i][v]表示前i件物品恰放入一个容量为v的背包可 阅读全文
posted @ 2013-02-11 22:35 Still_Raining 阅读(316) 评论(0) 推荐(1)
DAG上的动态规划
摘要:注意:这里的d(i)表示从节点i出发的最长路长度d(i) = max{d(j)+1|(i,j)∈ E}, E 为边集#include <stdio.h>#include <limits.h>#include <string.h>#define MAXN 102int u[MAXN], v[MAXN], w[MAXN][MAXN], d[MAXN];int n;int dp(int i){ if(d[i] > 0) return d[i]; d[i] = 1; int j; for(j=1; j<=n; j++){ if(w[i][j]) d[i] 阅读全文
posted @ 2013-02-08 11:22 Still_Raining 阅读(796) 评论(0) 推荐(0)
HDU2066一个人的旅行(最短路Dijkstra(枚举), Floyd)
摘要:一个人的旅行Problem Description虽然草儿是个路痴(就是在杭电待了一年多,居然还会在校园里迷路的人,汗~),但是草儿仍然很喜欢旅行,因为在旅途中 会遇见很多人(白马王子,^0^),很多事,还能丰富自己的阅历,还可以看美丽的风景……草儿想去很多地方,她想要去东京铁塔看夜景,去威尼斯看电影,去阳明山上看海芋,去纽约纯粹看雪景,去巴黎喝咖啡写信,去北京探望孟姜女……眼看寒假就快到了,这么一大段时间,可不能浪费啊,一定要给自己好好的放个假,可是也不能荒废了训练啊,所以草儿决定在要在最短的时间去一个自己想去的地方!因为草儿的家在一个小镇上,没有火车经过,所以她只能去邻近的城市坐火车(好可 阅读全文
posted @ 2013-02-05 12:07 Still_Raining 阅读(395) 评论(0) 推荐(0)
Bellman-Ford算法
摘要://Bellman-Ford算法(含有负权的最短路径问题)#include <stdio.h>#define MAXM 100#define MAXN 10const int INF = 1<<20;int u[MAXM], v[MAXM], w[MAXM];int d[MAXN];int Bellman_Ford(int v0, int n, int m){ int i, k; for(i=0; i<n; i++) d[i] = INF; d[v0] = 0; for(k=0; k<n-1; k++){ for(i=0; i<m; i++){ ... 阅读全文
posted @ 2013-02-03 17:22 Still_Raining 阅读(220) 评论(2) 推荐(0)
prim
摘要:基本思想1. 在图G=(V, E) (V表示顶点 ,E表示边)中,从集合V中任取一个顶点(例如取顶点v0)放入集合 U中,这时 U={v0},集合T(E)为空。2. 从v0出发寻找与U中顶点相邻(另一顶点在V中)权值最小的边的另一顶点v1,并使v1加入U。即U={v0,v1 },同时将该边加入集合T(E)中。3. 重复2,直到U=V为止。这时T(E)中有n-1条边,T = (U, T(E))就是一棵最小生成树。#include <stdio.h>#define MAXN 100#define INF (1<<20)int v[MAXN], w[MAXN][MAXN], 阅读全文
posted @ 2013-02-02 18:14 Still_Raining 阅读(298) 评论(0) 推荐(0)
HDU2544最短路(最短路 Dijkstra, spfa)
摘要:题目连接。解题:题中的起始点为0(假设元素从0开始),终止点为n-1Dijkstra:View Code //起始为0,终点为n-1#include <stdio.h>#include <limits.h>#include <string.h>#define MAXN 102#define INF (1<<20) //如果很小的话。是不能AC的。int v[MAXN], d[MAXN], w[MAXN][MAXN];void Dijkstra(int n){ memset(v, 0, sizeof(v)); int i, y; for(i=0; 阅读全文
posted @ 2013-02-01 13:27 Still_Raining 阅读(286) 评论(0) 推荐(0)
HDU1863畅通工程(最小生成树 Kruskal)
摘要:题目链接。#include <stdio.h>#include <stdlib.h>#define MAXN 5000int v[MAXN], u[MAXN], p[101], w[MAXN], r[MAXN];int find(int x){return p[x] == x ? x : (p[x] = find(p[x]));}int comp(const void *a, const void *b){ int x = *(int *)a, y = *(int *)b; return w[x] - w[y];}int main(){ int n, m, i, s, 阅读全文
posted @ 2013-01-28 20:58 Still_Raining 阅读(221) 评论(0) 推荐(0)
1232畅通工程(并查集)
摘要:http://acm.hdu.edu.cn/showproblem.php?pid=1232#include <stdio.h>#include <stdlib.h>#define MAXN 2000int v[MAXN], u[MAXN], p[MAXN];int icount;int find_f(int x){return p[x] == x ? x : (p[x]=find_f(p[x]));}int main(){ int n, m, i; while(scanf("%d", &n) == 1 && n != 0){ 阅读全文
posted @ 2013-01-28 20:09 Still_Raining 阅读(220) 评论(0) 推荐(0)
多段图动态规划算法的实现(DP)
摘要:#include <stdio.h>#include <stdlib.h>#include <string.h>#include <conio.h>#include <limits.h>#define MAX_VERTEX_NUM 20#define MAX_VALUE_TYPE INT_MAXtypedef int VertexType;typedef struct node{ VertexType adjvex; int weight; //权值 struct node *next;}EdgeNode;typedef struct 阅读全文
posted @ 2013-01-16 19:35 Still_Raining 阅读(3324) 评论(0) 推荐(0)
图(邻接表--链表和边表)
摘要:最新版的请看本博客图的三种存储方式。//邻接表 链表#include <stdio.h>#include <stdlib.h>#include <string.h>#include <conio.h>#include <limits.h>#define MAX_VERTEX_NUM 20typedef int VertexType;typedef struct node{ VertexType adjvex; int weight; //权值 struct node *next;}EdgeNode;typedef struct vno 阅读全文
posted @ 2013-01-16 14:34 Still_Raining 阅读(3386) 评论(0) 推荐(0)
图(邻接矩阵)
摘要:最新版的请看本博客图的三种存储方式。#include <cstdio>#include <cstdlib>#include <cstring>#include <conio.h>#include <limits.h>#define MAXN 256#define INFINITY INT_MAX#define MAX_VERTEX_NUM 20#define OK 1typedef int VRType;typedef int InfoType;typedef int VertexType;typedef int Status;typ 阅读全文
posted @ 2013-01-15 17:00 Still_Raining 阅读(334) 评论(0) 推荐(0)
BFS
摘要:#include <stdio.h>#include <stdlib.h>#include <string.h>#define MAXN 100int maze[MAXN][MAXN];int vis[MAXN][MAXN];int queue[MAXN*MAXN]; //队列int fa[MAXN][MAXN]; // 父结点int dx[]={0,0,-1,1};int dy[]={-1,1,0,0};int n,m; //n为行 m为列void bfs(int x, int y){ int front, rear, u, d; front = rear 阅读全文
posted @ 2013-01-13 11:51 Still_Raining 阅读(206) 评论(0) 推荐(0)
dfs
摘要:其实玩游戏也得学程序题目地址:http://acm.sdut.edu.cn/sdutoj/problem.php?action=showproblem&problemid=2465只是用DFS练练手而已。()。//head file#include <stdio.h>#include <string.h>#include <stdlib.h>//definition#define STACK_INIT_SIZE 100#define STACKINCREMENT 10#define OK 1#define ERROR 0#define TRUE 1# 阅读全文
posted @ 2012-12-12 18:39 Still_Raining 阅读(292) 评论(0) 推荐(0)

上一页 1 2 3 下一页