算法ACM
文章平均质量分 51
John_Denver
这个作者很懒,什么都没留下…
展开
-
POJ 1258 Agri-Net
这是一个典型的Prim算法应用,在具体的这个1258中碰到一些小accident,由于是多case的,所以每次都需要把flag,U_Set清空掉,便于下一次执行#include #include #include using namespace std;const int MAX = 101;const int INF = 100001;int c[M原创 2008-11-20 13:20:00 · 475 阅读 · 0 评论 -
POJ 1270 Following Orders
典型的排列数搜索,用java写是因为便于进行输入处理import java.io.BufferedInputStream;import java.util.Scanner;import java.util.SortedSet;import java.util.TreeSet;public class Main { int N; char[] arrs; char[] rules;原创 2008-11-24 20:00:00 · 803 阅读 · 0 评论 -
poj 上用java写代码的模板
写出来给自己做个参考,经常忘记Scanner什么的怎么写import java.io.BufferedInputStream;import java.util.Scanner;public class Main { public static void main(String args[]) { Scanner cin = new Scanner(n原创 2008-11-24 18:40:00 · 586 阅读 · 0 评论 -
POJ 1979 Red and Black
这道题目是典型的回溯法的一个应用,采用深度优先搜索/*这个应该属于子集树 */#include using namespace std;char tile[21][21];bool flag[21][21];int nstep;int row,col;int dire[4][2]={{0,1},{1,0},{0,-1},{-1,0}};void原创 2008-11-24 18:27:00 · 694 阅读 · 0 评论 -
Prim算法 (改进)
前几篇文章,发的都是Prim算法差不多O(n^3)的时间复杂度,其实标准的Prim算法,时间复杂度是O(n^2),所以需要改进,Prim算法就是U集合的增大和V-U集合的减少,总共要进行n-1次地把点从 V-U集合添加到U集合中,直到U集合中含有n个点为止。如图: #include#include#include#include#include us原创 2008-11-21 22:28:00 · 2864 阅读 · 0 评论 -
Prim算法概述
假设V是图中顶点的集合,E是图中边的集合,TE为最小生成树中的边的集合,则prim算法通过以下步骤可以得到最小生成树: 1:初始化:U={u0},TE={}。此步骤设立一个只有结点u0的结点集U和一个空的边集TE作为最小生成树的初始行态,在随后的算法执行中,这个行态会不断的发生变化,直到得到最小生成树为止。 2:在所有u∈U,v∈V-U的边(u,v)∈E中,找一条权最小的边(u0,v原创 2008-11-20 10:53:00 · 752 阅读 · 0 评论 -
POJ 1789 Truck History
这道题目,用前面的prim算法,就会超时,所以需要寻找更加高性能的prim算法,包括1.string输入的优化2.去掉vector#include #include #include #include #include using namespace std;const int MAX = 2001;const int INF = 100;原创 2008-11-20 15:47:00 · 782 阅读 · 0 评论 -
POJ 2485 Highways
这是prim的一个变型,求最小生成树中,最大的一条边,代码写法基本上也是一样的#include #include #include using namespace std;const int MAX = 501;const int INF = 65537;int c[MAX][MAX];bool flag[MAX];vectorint> U_Set原创 2008-11-20 14:36:00 · 484 阅读 · 0 评论 -
POJ 2075 Tangled in Cables
这个又是一个Prim算法的典型应用,具体在此题目的时候要注意,数组要开得适当大,无向图在邻接矩阵中要置为对称。#include #include #include #include using namespace std;const int MAX = 15000;const double INF = 100000000;string owner[MAX原创 2008-11-20 14:14:00 · 665 阅读 · 0 评论 -
搜索分类
搜索的算法有很多种,主要有以下几种:回溯法、深度优先、广度优先、双向广度、A*等算法,其中,回溯法是非常重要的一种算法,回溯法虽然时间复杂度高,但是可以解决的题目范围还是比较广,所以我们应该首先从回溯法学起,搜索算法一般来说,都存在递归的和非递归的版本,递归的一般比较好理解,非递归的,如果引入stack,vector等的数据结构,其实也还蛮好理解的,我们在练习的时候,应该2种版本最好都要写熟练原创 2008-11-23 16:23:00 · 710 阅读 · 0 评论