随笔分类 -  图论

上一页 1 2

Idiomatic Phrases Game zoj 2750 Dijkstra
摘要:典型的Dijkstra,按题目要求构造出对应的图,找从第一个成语到最后一个成语的最短路,在中间找第一个成语到其他成语的最小用时时没有找到,所有未选中的成语的用时都是INF,那么就输出-1,如果找出的是最后一个成语了,就berak,输出min值。在读用时和成语字符串时,我写了个scanf("%d %s",&num[i],a[i]); 其中char a[MAXN][50],然后WA了,我就改成了 char a[MAXN][100],scanf("%d",&num[i]);scanf("%s",a[i]);然后及AC了。贴代 阅读全文

posted @ 2013-04-01 10:50 allh123 阅读(165) 评论(0) 推荐(0)

Domino Effect ZOJ 1298 POJ 1135 Dijkstra
摘要:这题WA很久,然后找不出原因,后来看了书上的程序(图论理论算法实现及应用神马的),然后感觉不出来自己哪里错了,后来改了改,把无穷大的定义改小了点,再放到ZOJ上,成功AC了,我都不知道为什么,也许还改了其他地方,我已经糊涂了,然后又把它放POJ 1135上又WA了,我都憔悴了,最后我想起以前刷水题时要把double用%f输出,我试了一下,果然AC了,求解释`````贴代码:View Code 1 #include <cstdio> 2 #include <cstring> 3 #define MAXN 505 4 #define INF 1000000 5 int n; 阅读全文

posted @ 2013-03-31 23:04 allh123 阅读(180) 评论(0) 推荐(0)

QS Network ZOJ 1586 Prim
摘要:这个题绝对的Prim,但是这题有个怪一点的地方,他的适配器要重复买,比如顶点A和B连了一条边,顶点B和C连了一条边,那么要买,两个B适配器,一个A和一个C适配器,我先理解错了,以为只要买一个B适配器就可以了,所以连测试数据都过不了。然后可以直接把两个适配器的价格算在这条边的权值上,反正总的要求是造价最低嘛。。。贴代码:View Code 1 #include <cstdio> 2 #define MAXN 1020 3 int n; 4 int sum; 5 int lowcost[MAXN]; 6 int edge[MAXN][MAXN]; 7 void Prim() 8 { 9 阅读全文

posted @ 2013-03-31 21:26 allh123 阅读(163) 评论(0) 推荐(0)

Truck History POJ 1789 ZOJ 2158 Prim算法
摘要:就是Prim算法,求最小生成树,把每个汽车编号看成点,两个编号的距离,也就是相同位置不同字符的数目,就看做边,显然,看成无向图,谁生成谁自己想想就行了 ,这里边比较多,用Prim算法。代码:View Code 1 #include <cstdio> 2 #define MAXN 2005 3 int n; 4 int lowcost[MAXN]; 5 int edge[MAXN][MAXN]; 6 int dis(char a[],char b[]) 7 { 8 int s = 0; 9 for(int i=0; i<7; i++)10 if(a[i] != ... 阅读全文

posted @ 2013-03-31 21:21 allh123 阅读(148) 评论(0) 推荐(0)

Network POJ 1861 ZOJ 1542 Kruskal算法 提问方式有点变化而已
摘要:和ZOJ 1203解法一样,不赘述,我都直接复制的代码修改了一下贴代码:View Code 1 #include <cstdio> 2 #include <cstring> 3 #include <algorithm> 4 #include <cmath> 5 #define MAXN 1020 6 #define MAXM 15020 7 using namespace std; 8 int n,m; //n为顶点个数,m为边数 9 struct ArcNode10 {11 int u,v; //一条边的起点和终点12 int w; //边的权 阅读全文

posted @ 2013-03-31 01:34 allh123 阅读(227) 评论(0) 推荐(0)

ZOJ 1203 Swordfish Kruskal算法求最小生成树
摘要:就是如题的做法,在一个连通图中找一条最小生成树,Kruskal的思想就是先根据所有边的权值按小到大排序,然后依次选择边进最小生成树里,但是要排除该边加进去后出现了环,生成树里是不能有环的,这样的边就不能加入,在挑选了n-1(n为图中点的个数)条边后就结束,可以证明这样构造出来的图就是最小生生成树。再判断是否会出现环时用到并查集。int temp = parent[r1] +parent[r2];//两根结点所带结点的总数,因为写错了这句,我检查了N久,砸墙,我很激动地写成了 int temp = Find(r1)+Find(r2);然后各种程序各种混乱了。还有一点因为没有看见说每两个case中 阅读全文

posted @ 2013-03-31 00:54 allh123 阅读(204) 评论(0) 推荐(0)

POJ 2582 拓扑序列,其实更为准确的说法应该是判是否出现环
摘要:这个题我是看书上解题思路做的,自己未必想的出来,就是根据他给你的窗口分布去构造图,比如说这个格子本来可以被1,2,4,5窗口共用(只是指1,2,4,5都能出现在这个格子上,但是一次当然只可能出现一种情况),现在被2占用了,那么2可能是覆盖了1,4,5窗口,这样就构造有向边<2,1>,<2,4>,<2,5>如此类推,把整个图构造出来后,出现环了 ,证明电脑坏掉了,鉴于我相当水,只好用拓扑排序写,因为一共也就9个点,尽管拓扑时间复杂度高,但数据小,也就还能接受啦,不会超时。我0MS过的。如果可以,建议尽量用别的各种方法去判环。这题我也WA好多次,这次是因为忘了注 阅读全文

posted @ 2013-03-30 11:30 allh123 阅读(248) 评论(0) 推荐(0)

拓扑排序POJ 1094
摘要:这题就是拓扑排序,但是能确定的情形必须是拓扑序列唯一。做法是在读边的时候 ,读完一条边后就调用topsort函数,如果通过topsort函数能确定出现环,则矛盾,或者存在了把所有 n个字母都包括进去了的唯一拓扑序列。就可以输出结果,以后就不调用topsort函数了。但是注意剩下的数据要读完,当读完所有的边上述两种情况都还没有出现,就可以输出不能确定了我是这样做的,在做拓扑排序时,先把入度为0的顶点入栈,该顶点入度设为-1(这样就不会重复入栈)如果出现两入度为0,可以知道不存在唯一拓扑序列了,别急,要接着做拓扑排序,从栈中 pop出元素,所有是该顶点后继的顶点的入度减一,再找入度为0的顶点入栈, 阅读全文

posted @ 2013-03-29 21:59 allh123 阅读(285) 评论(2) 推荐(0)

Bus Pass ZOJ 2913 BFS 最大中取最小的
摘要:/*该题的解题思路为BFS,从某点开始进行BFS,以层数表示到该地区的距离,用到了滚动队列。 对每个公交车的站点进行BFS,记录每个地区到该公交站的距离,遍历完后会得出每个地区到 所有公交站点的最大距离,以此知道选择了该地区后的星型阀值。然后从所有地区中选择一个 最小的*/View Code 1 #include <cstdio> 2 #include <queue> 3 #include <cstring> 4 #define ZMAX 10000 //地区编号的最大值 5 #define INF 100000 6 using namespace std; 阅读全文

posted @ 2013-03-23 02:02 allh123 阅读(198) 评论(0) 推荐(0)

zoj 2412 水田灌溉,求连通分支个数
摘要:次题的关键是把稻田的中心点抽象成图中的点,两中心点有水管相连表示两点连通,这样,此题就转化成了求图的连通分支数目View Code 1 #include <iostream> 2 #include <cstdio> 3 #include <cstring> 4 using namespace std; 5 char grid[52][52]; 6 char map[52][52]; 7 int m,n; 8 int dir[4][2] = {{-1,0},{0,1},{0,-1},{1,0}}; // 上,右,左,下 9 //编号分别为 0,1,2,310 阅读全文

posted @ 2013-03-15 17:14 allh123 阅读(228) 评论(0) 推荐(0)

Havel-Hakimi定理(判断一个序列是否可图)
摘要:判断一个有限序列是否是可图的,有Havel-Hakimi定理:由非负整数组成的非增序列s:d1,d2,~~~(省略号),dn(n>=2,d1>=1)是可图的,当且仅当序列:s1:d2-1,d3-1,~~~,d(d1+1) - 1,d(d1+2),~~~,dn是可图的。序列s1中有n-1个非负整数,s序列中d1后的前d1个度数减1后构成s1中的前d1个数。据此定理可以根据一个序列构造出相应的图(结果不唯一)实例:POJ 1659 青蛙的邻居注意:给每个顶点先编好号View Code 1 #include <cstdio> 2 #include <cstring> 阅读全文

posted @ 2013-03-13 21:17 allh123 阅读(767) 评论(0) 推荐(0)

上一页 1 2

导航