05 2011 档案

摘要:不得不说:本题很经典,用到了单元最短路径中的两个主要算法:Bellman-Ford + Floyd,只差Dijkstra、还有什么差分约束了。应该再好好消化巩固。 不得不看:1、http://zh.wikipedia.org/wiki/Bellman-Ford算法 2、http://www.noc... 阅读全文
posted @ 2011-05-13 04:01 nepaul 阅读(383) 评论(0) 推荐(0)
摘要:首先总结下传递闭包的知识,应该说是Floyd-Warshall的一个应用,NOCOW上写的很好,直接贴链接,以后温故知新: http://www.nocow.cn/index.php/Floyd-Warshall%E7%AE%97%E6%B3%95(蓝点后继续提炼!) 题 意:给牛的数量n和m对输赢... 阅读全文
posted @ 2011-05-12 23:37 nepaul 阅读(316) 评论(0) 推荐(0)
摘要:题 意:给你一副图,要求每个模块中不相连的‘X’的数目,最后按照大小输出。 思 路:两个DFS,第一个确定大图中符合要求的模块,主要用来确定该模块中X的位置;第二个DFS用来计算不连通的X的数量了。 学习点:多个DFS的使用,思路要清晰,递归的时候注意边界条件(dfs函数写的不够漂亮)。用c写有些细... 阅读全文
posted @ 2011-05-11 22:22 nepaul 阅读(242) 评论(0) 推荐(0)
摘要:题 意: 思 路:先要判断连通(dfs遍历,若遍历到的节点数与输入的节点数相同说明通),这是前提条件。接着根据欧拉路径相关 定理判断。 学习点:欧拉路径 定理一、 有限图G是链或圈的充要条件是:G为连通图,且其中奇顶点的数目等于0或者2。有限连通图G是圈当且仅当它没有奇顶点; ... 阅读全文
posted @ 2011-05-11 13:54 nepaul 阅读(277) 评论(0) 推荐(0)
摘要:题 意:给定一三维迷宫的起始位置和终止位置,如果能走出,求出所用最少时间(可以理解为迷宫中的最短路径),否则输 出Trapped! 思 路:BFS,六个方向 学习点:BFS 注意点:1、输入(由于输入有空格,所以要特殊处理,一开始没考虑到,结果怎么都出不来); 2、六个方向怎么对应要搞清楚; 3... 阅读全文
posted @ 2011-05-10 23:27 nepaul 阅读(177) 评论(0) 推荐(0)
摘要:题 意:给你一定的关系,当给定的其中若干关系(按照时间顺序)已经形成回路,对剩下的关系不处理,直接判定矛盾;当 其中若干(按照时间顺序)关系已经能够确定一种唯一的拓扑排序时,强调唯一,对剩下的关系不处理;否则判定 不能确定。思 路:每对关系依次进行拓扑排序。学习点:拓扑排序。源代码:#include <stdio.h>#include <string.h>#define MAXN 27//#define OOint nNum, nPair;int nMap[MAXN][MAXN];int nIndegree[MAXN];char nOrder[MAXN];int top 阅读全文
posted @ 2011-05-10 19:28 nepaul 阅读(172) 评论(0) 推荐(0)
摘要:题 意:鬼知道。思 路:Floyd算法。学习点:Floyd算法。void procFloyd(){ int i, j, k; int tmp; for (k = 0; k != nNum; ++k) { for (i = 0; i != nNum; ++i) { for (j = 0; j != nNum; ++j) { tmp = dis[i][k] + dis[k][j]; if (tmp < dis[i][j]) { dis[i][j] = tmp; } } } } return;}源代码:#include <stdio.h>#define INF 32767#defi 阅读全文
posted @ 2011-05-09 21:13 nepaul 阅读(181) 评论(0) 推荐(0)
摘要:题 意:给定国际象棋棋盘,要求马从某点跳到某点,求最少步数 思 路:即BFS求最短路径长度 学习点:BFS 源代码: #include #define MAXN 65 int fromRow, fromCol, toRow, toCol; int vis[MAXN][MAXN], dis[MAXN... 阅读全文
posted @ 2011-05-09 01:31 nepaul 阅读(300) 评论(0) 推荐(1)
摘要:参考:刘汝佳《算法竞赛入门经典》第六章:数据结构基础 源代码: #include #define MAXN 10 int dx[] = {-1, 1, 0, 0}, dy[] = {0, 0, -1, 1}; char name[] = {'U', 'D', 'L', 'R'}; int q[MA... 阅读全文
posted @ 2011-05-09 00:48 nepaul 阅读(1514) 评论(0) 推荐(0)
摘要:题 意:给定一迷宫,输出从起点到终点的最短路径 思 路:BFS 学习点:BFS 源代码: #include #define MAXN 6 #define nSize 5 int vis[MAXN][MAXN]; int nMap[MAXN][MAXN]; int faNode[MAXN][MAXN... 阅读全文
posted @ 2011-05-08 23:34 nepaul 阅读(665) 评论(0) 推荐(0)
摘要:题 意: 思 路: 学习点: 具体数学:Eulerian Number 描述:f(n,k)代表n个数排列,且有k个升序数的排列数。 ... 阅读全文
posted @ 2011-05-08 14:11 nepaul 阅读(781) 评论(0) 推荐(0)
摘要:题意: 有n个镇,分别编号为0~n-1,有些镇靠海,xiaoY现在0镇,求出从0镇到海边的最短路径长度。 思路: floyd算法。 学习点:floyd算法 资料: 1、 http://v.youku.com/v_showMini/id_XMTA1MTg5OTQ0_ft_344.html; 2、 ... 阅读全文
posted @ 2011-05-08 14:05 nepaul 阅读(267) 评论(0) 推荐(0)
摘要:题意:很好理解,从根结点开始遍历相加结点上的值直到叶子结点,若有任意和于输入的值相等,则输出“yes”,否则输出“no” 思路:递归遍历 学习点:构造树、树的遍历 c++中cin.putback(ch);这个函数很神奇!(将字符放回到输入流中) 注意:这道题目其实考差了递归的思想,对树的... 阅读全文
posted @ 2011-05-05 21:56 nepaul 阅读(384) 评论(0) 推荐(0)
摘要:题意:给出n个单词(1<=n<=1000),求出每个单词的非公共前缀,如果没有,则输出自己。思路:基础的trie。源代码:(428K,0MS)#include<iostream>using namespace std;const int Max = 1002;const int branchNum = 26; struct tree_node{ int count; // 记录用到这个节点的单词数量,如果=1,则证明其为这个单词唯一的节点。 tree_node *next[branchNum];}root, node[20*Max];int p = 0; void in 阅读全文
posted @ 2011-05-03 23:58 nepaul 阅读(146) 评论(0) 推荐(0)
摘要:导读:原文根据作者Al katib在codingthis.com上发表的一篇《15 Good Computer Programming Habits》,由国内整理编译《15个编程好习惯》。内容如下:1. 动手编码之前,你需要对要编码实现的解决方案有一个正式的或粗略的设计。永远不要在没有任何设计的前提下就开始编码,除非所编代码不重要。2. 优秀的代码文档跟编程语言知识一样重要。在代码源文件中,为每个主要的代码段添加注释,解释代码的基本逻辑。最好注明程序的构建和修改日期,以及修改的原因也是非常有必要的。3. 维护程序的各个版本同样重要。当前有些编程工具都自带一个版本管理工具。无论你什么时候改变自己 阅读全文
posted @ 2011-05-03 17:39 nepaul 阅读(156) 评论(0) 推荐(0)