摘要: 拓扑排序:事情优先级排序special judgeAOV网络:有向无环图稀疏图:e<nlogn 用vector稠密图:e》n^2 用数组map[i][j] = 1 有边 0 无边思想:for(1~n) //循环n次找n个点 { 找入度为0且未标记的点;删除相连的点标记点; } 阅读全文
posted @ 2012-09-08 10:43 另Ⅰ中Feel▂ 阅读(192) 评论(0) 推荐(0) 编辑
摘要: #include<iostream>#include<vector>using namespace std;const int maxn = 500+10;vector<int>map[maxn];int save[maxn];int index[maxn];bool used[maxn];int n, m;int flag;//初始化void init(){for(int i=0; i<=n; i++){map[i].clear();}memset(used, false, sizeof(used));memset(index, 0, sizeof( 阅读全文
posted @ 2012-09-08 10:29 另Ⅰ中Feel▂ 阅读(115) 评论(0) 推荐(0) 编辑
摘要: 一、概述 对一个有向无环图(Directed Acyclic Graph简称DAG)G进行拓扑排序,是将G中所有顶点排成一个线性序列,使得图中任意一对顶点u和v,若<u,v> ∈E(G),则u在线性序列中出现在v之前。 通常,这样的线性序列称为满足拓扑次序(TopoiSicai Order)的序列,简称拓扑序列。注意: ①若将图中顶点按拓扑次序排成一行,则图中所有的有向边均是从左指向右的。 ②若图中存在有向环,则不可能使顶点满足拓扑次序。 ③一个DAG的拓扑序列通常表示某种方案切实可行。 【例】一本书的作者将书本中的各章节学习作为顶点,各章节的先学后修关系作为边,构成一个有向图。按 阅读全文
posted @ 2012-09-07 21:30 另Ⅰ中Feel▂ 阅读(226) 评论(0) 推荐(1) 编辑
摘要: 1、堆栈栈是一种特殊的线性表,插入或删除栈元素的运算只能在表的一端进行,称运算的一端为栈顶,另一端称为栈底。队列也是一种特殊的线性表(基本操作都是线性操作的子集)。 特点:后进先出栈又称为“后进先出”的线性表,简称LIFO表。栈的链式实现是以链表作为栈的存储结构,并在这种存储结构上实现栈的基本运算。栈的链式实现称为链栈。2、有向无环图描述含有公共子式的表达式的有效工具;描述一项工程或系统的进行过程的有效工具。3、一些概念通常我们把计划、施工过程、生产流程、程序流程等都当成一个工程,一个大的工程常常被划分成许多较小的子工程,这些子工程称为活动。这些活动完成时,整个工程也就完成了。我们用一种有向图 阅读全文
posted @ 2012-09-07 21:30 另Ⅰ中Feel▂ 阅读(267) 评论(0) 推荐(0) 编辑
摘要: 题目传送门:http://acm.hdu.edu.cn/showproblem.php?pid=1162题意: 最小生成树View Code 1 #include<iostream> 2 #include<algorithm> 3 #include<cmath> 4 using namespace std; 5 6 const int maxn = 100+10; 7 int far[maxn]; 8 int n, m; 9 int k; 10 struct Edge 11 { 12 const bool operator<(Edge &n)c 阅读全文
posted @ 2012-09-06 10:33 另Ⅰ中Feel▂ 阅读(154) 评论(0) 推荐(0) 编辑
摘要: 题目传送门:http://acm.hdu.edu.cn/showproblem.php?pid=1102题意: 有N多个小镇,现在需要建路使所有小镇相通,间接跟直接,给你这些小镇直接的距离,但是有些小镇是已经有路相连的了,所以这两个小镇之间就不用再建路。方法: 用了prim跟kruskal都可以做出来,其实就是求最小生成树。只要把已经有路相通的两个小镇的距离改为0即可,不过在开数组时应该是开n*n*2,其他的就一如既往了。没什么特别要注意的!都是练习Kruskal跟prim算法的习题。View Code 1 #include<iostream> 2 #include<algo 阅读全文
posted @ 2012-09-06 10:25 另Ⅰ中Feel▂ 阅读(177) 评论(0) 推荐(0) 编辑
摘要: View Code 1 #include<iostream> 2 using namespace std; 3 4 const int INF = 0X3fffffff; 5 const int Max = 1005; 6 bool used[Max]; 7 bool vist[Max]; 8 int map[Max][Max]; 9 int dis[Max];10 int n, m;11 12 void Make_set()13 {14 for(int i=0; i<Max; i++)15 {16 for(int j=0; j<Max; j++)17 ... 阅读全文
posted @ 2012-09-01 00:27 另Ⅰ中Feel▂ 阅读(123) 评论(0) 推荐(0) 编辑
摘要: 用vertor动态数组来做的,模拟链表。#include<iostream>#include<vector>#include<string>#include<queue>using namespace std;const int Max = 27;bool used[Max];int flag;vector<int>V[26];void DFS(int n){if(n=='m'-'a') //找到目标{flag = 1;return ;}else{while(!V[n].empty()){int k = 阅读全文
posted @ 2012-08-31 11:10 另Ⅰ中Feel▂ 阅读(147) 评论(0) 推荐(0) 编辑
摘要: 题目传送门:http://acm.hdu.edu.cn/showproblem.php?pid=1045程序分析: 题目是说在一个特殊的地图里摆设碉堡,限制条件可能跟N皇后又点相似,但是这里有墙,中间隔有墙的话还是不会互相干扰的。只是行列方向会冲突,斜角线不会冲突,。所以我们只有判断所在的行列不会存在冲突的碉堡就行。注意中间可以隔有墙。记住每一次到达最后一个点时的可放碉堡数,比现在保存最大的就替换为最大值。解决方法: 深搜回溯,找出每一种方法的最大放置碉堡数,编写一个判断能否放置碉堡的函数,细节看代码。 View Code 1 #include<iostream> 2 #inclu 阅读全文
posted @ 2012-08-31 09:56 另Ⅰ中Feel▂ 阅读(162) 评论(0) 推荐(0) 编辑
摘要: 题目传送门:http://acm.hdu.edu.cn/showproblem.php?pid=1175程序分析: 题意大概就是说了一些连连看的游戏规则,就是在有限次转弯内能到达终点而且两个点是同样的类型的点就可以把他们消去。注意的是不可以绕过外面而相连,而且两个点不可以存在是0类型的点,也不可以是始点跟终点为相同的一个点。给你整张图,还有一些点,问你这些点能否消去。解决方法: 要求最小的弯道相连道消去,那么可以考虑用广搜了,只要计算好路途中经过的弯道数就可以了。可以以弯道数不大于2为剪枝条件。入队前标记。不过在判断能否入队列前应该先把下一步要到达的点的弯道数和方向赋值好。就是先赋值再... 阅读全文
posted @ 2012-08-30 20:21 另Ⅰ中Feel▂ 阅读(165) 评论(0) 推荐(0) 编辑