上一页 1 ··· 7 8 9 10 11 12 13 下一页
  2013年2月19日
摘要: 数据结构上机测试4.1:二叉树的遍历与应用1View Code #include <stdio.h> #include <stdlib.h> #include <string.h> #define MAXN 200 void build(int n, char *s1, char *s2, char *s){ if(n<=0) return; int p = strchr(s2, s1[0]) - s2; build(p, s1+1, s2, s); build(n-p-1, s1+p+1, s2+p+1, s+p); s[n-... 阅读全文
posted @ 2013-02-19 15:13 Still_Raining 阅读(206) 评论(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)
摘要: 题目链接。解题报告:这是很久前做的了。。又扒出来了。。怕再忘了嘛。。很简单。建立表达式树,然后后序遍历。代码如下:#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)
  2013年2月15日
摘要: 题目链接。解题报告:用了两个方法。。一个是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)
  2013年2月14日
摘要: 题目链接。解题报告:就是Kruskal就行了。。不过WA了很多次。第一个致命错误是。。数据会有很多组(无语了)。。第二个错误是。。for(i=0; i<q; i++){ scanf("%d %d", &a, &b); int x = find(a), y = find(b); p[x] = y;}错写成了for(i=0; i<q; i++){ scanf("%d %d", &a, &b); p[a] = b;}只能说对于并查集理解的并不是十分透彻。。例如,对于1 2, 1 3这两组数据, 操作p[1] = 2, 阅读全文
posted @ 2013-02-14 22:00 Still_Raining 阅读(166) 评论(0) 推荐(0)
摘要: 题目链接。解题报告:拓扑水题一道。1.DFS检测是否有环。#include <stdio.h>#include <string.h>#define MAXN 110int G[MAXN][MAXN], v[MAXN];int n, m;int dfs(int u){ v[u] = -1; int i; for(i=0; i<n; i++)if(G[u][i]){ if(v[i] < 0) return 0; if(!v[i] && !dfs(i)) return 0; } v[u] = 1; return 1;}int topos... 阅读全文
posted @ 2013-02-14 17:21 Still_Raining 阅读(218) 评论(0) 推荐(0)
摘要: 题目链接解题报告:这题小意思。。啦 啦啦#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)
  2013年2月12日
摘要: 题目连接解题报告:各种错误,各种纠正。。自我感觉对DP的理解入门些了。第一种思路是从i结点出发所能达到的最大高度,状态转移方程为dp[i] = dim[i]+max{dp[j]}, 其中G[i][j]=1,即j能放在i上。AC代码如下:View Code #include <stdio.h>#include <stdlib.h>#include <string.h>#define MAXN 91struct{ int x, y, z;}dim[MAXN*3];int dp[MAXN], G[MAXN][MAXN], _index;void _swap(int 阅读全文
posted @ 2013-02-12 23:40 Still_Raining 阅读(162) 评论(0) 推荐(0)
  2013年2月11日
摘要: 题目连接解题报告:结合算法竞赛入门经典(刘汝佳), 算法设计与分析(郑宗汉,郑晓明)花了一天才算弄懂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)
  2013年2月10日
摘要: 题目连接(点我查看).琢磨了一天。。竟然有人说这是水题。。解题报告:首先要弄懂最长上升子序列,可以看下征南同学的博客(点击链接)。本题呢。例如对于6 7 5 1 3 2 4先将7放入数组【0】, 然后看5,因为5<=7,更新数组, 数组[0] = 5,接着看剩下的1,3,2。用1更新【0】,然后3>1,所以放在【1】中,2更新【1】,4>1,4>2,4放在【2】,这样呢。就需要2+1套拦截系统。该思路代码如下。#include <iostream> #include <cstdlib> #include <cstdio> #inclu 阅读全文
posted @ 2013-02-10 19:57 Still_Raining 阅读(179) 评论(0) 推荐(0)
  2013年2月8日
摘要: 跳到原题解题报告:首先这题相当于数字三角形。相当于从(0,5)出发,求到达底端的最大值(i, 0) , (i, 10)这两个端点是要注意的,因为(i,0)只能到达(i+1, 0) 和 (i+1, 1), 而(i, 10)只能到达(i+1, 9), (i+1, 10)#include <stdio.h>#include <string.h>#define MAXN 100010int dp[MAXN][12];int max_num(int a, int b, int c){ a = a > b ? a : b; a = a > c ? a : c; retu 阅读全文
posted @ 2013-02-08 23:10 Still_Raining 阅读(191) 评论(0) 推荐(0)
摘要: 转到题目。解题分析:既然让求因子只能为2357的数, 那么分别看2357的倍数就OK了。另外。输出时要注意st(first), nd(secend), rd(third)因为11,12,13时为th 所以111和101也是不同的代码如下:#include <stdio.h>#define n 5900int hum[n];int min_num(int a, int b, int c, int d){ int t = a; if(t>b) t = b; if(t>c) t = c; if(t>d) t = d; return t;}int main(){ i... 阅读全文
posted @ 2013-02-08 15:56 Still_Raining 阅读(260) 评论(0) 推荐(0)
摘要: 注意:这里的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)
  2013年2月5日
摘要: 最小生成树:1.Kruskal算法(同时包含并查集)2.prim算法最短路径问题: 1.Dijkstra(迪杰斯特拉):适用于权值为非负的图的单源最短路径。可用于计算正权图上的单源最短路(Single-Source Shortest Paths, SSSP),即从单个源点出发,到所有结点的最短路,该算法同时适用于有向图和无向图。 2.Bellman-Ford(贝尔曼-福特):适用于权值有负值的图的单源最短路径。前提条件为不含负环。既然不含环, 最短路最多进过(起点不算)n-1个结点,通过n-1轮松弛操作(relaxation)得到。 3.spfa算法(Shortest Path Fast... 阅读全文
posted @ 2013-02-05 15:48 Still_Raining 阅读(183) 评论(0) 推荐(0)
摘要: 题目链接。分析:只要将互相认识的人之间的权值赋值为1,并用Floyd算法然后检查任意两人间的最短路是否大于7即可#include <stdio.h>#include <string.h>#define MAXN 110const int INF = (1<<28);int w[MAXN][MAXN], d[MAXN][MAXN];void Floyd(int n){ int i, j, k; for(i=0; i<n; i++){ for(j=0; j<n; j++){ if(w[i][j] != INF) d[i][j] = w[i][j];. 阅读全文
posted @ 2013-02-05 15:13 Still_Raining 阅读(191) 评论(0) 推荐(0)
摘要: 一个人的旅行Problem Description虽然草儿是个路痴(就是在杭电待了一年多,居然还会在校园里迷路的人,汗~),但是草儿仍然很喜欢旅行,因为在旅途中 会遇见很多人(白马王子,^0^),很多事,还能丰富自己的阅历,还可以看美丽的风景……草儿想去很多地方,她想要去东京铁塔看夜景,去威尼斯看电影,去阳明山上看海芋,去纽约纯粹看雪景,去巴黎喝咖啡写信,去北京探望孟姜女……眼看寒假就快到了,这么一大段时间,可不能浪费啊,一定要给自己好好的放个假,可是也不能荒废了训练啊,所以草儿决定在要在最短的时间去一个自己想去的地方!因为草儿的家在一个小镇上,没有火车经过,所以她只能去邻近的城市坐火车(好可 阅读全文
posted @ 2013-02-05 12:07 Still_Raining 阅读(395) 评论(0) 推荐(0)
  2013年2月3日
摘要: //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)
摘要: 学会解决最小生成树(已学),最短路径问题(已学)以及拓扑排序(已学2013-02-1416:11:44),背包问题(已学)。(很好很好。以后就这样来。。2013-02-1416:12:07) 阅读全文
posted @ 2013-02-03 12:28 Still_Raining 阅读(444) 评论(0) 推荐(0)
摘要: 对于不含负权边的图求单源最短路径,Dijkstra算法是最高效的。但是在含负权边的图中,Dijkstra很可能得不到正确的结果,因为Dijkstra每次选的是当前能连到的边中权值最小的,在正权图中这种贪心是对的,但是在负权图中就不是这样了。比如1——>2权值为5,1——>3权值为6,3——>2权值为-2,求1到2的最短路径时,Dijkstra就会选择权为5的1——>2,但实际上1——>3——>2才是最优的结果。另外如果包含负环,则意味着最短路径不存在。因为只要在负权回路上不断兜圈子,所得的最短路长度可以任意小。 阅读全文
posted @ 2013-02-03 12:09 Still_Raining 阅读(10336) 评论(2) 推荐(5)
上一页 1 ··· 7 8 9 10 11 12 13 下一页