上一页 1 ··· 21 22 23 24 25 26 27 28 29 ··· 34 下一页
摘要: 额,还是一个路径问题,不过这次是判断是否存在负权回路,这个直接用bellman ford 算法做就行了,只要松弛次数超过n次,则证明存在负权回路这个在说benllman ford算法的时候解释的很详细了,不过现在不太敢用INT_MAX来表示最大的整数了,动不动就溢出了#include<iostream>#define MAXINT 9999999using namespace std;int n,m,w,dis[510];struct Edge{ int u,v,weight;}edge[5220];void relax(int u, int v, int weight){ if( 阅读全文
posted @ 2011-08-12 23:28 枕边梦 阅读(180) 评论(0) 推荐(0) 编辑
摘要: 稍微修改了一下hdu1874的代码就直接过了不过 31ms 缺陷,一大缺陷FSPA版:#include<iostream>#include<string>#include<algorithm>#define MAXN 110using namespace std;int map[MAXN][MAXN]; //map[i,j]为初始输入的i到j的距离,未知的map[i,j]=INT_MAX;int dis[MAXN],Q[MAXN*100];char vst[MAXN];// 参数n表示结点数,s表示源点int SPFA(int n, int s){ // p 阅读全文
posted @ 2011-08-12 18:01 枕边梦 阅读(273) 评论(0) 推荐(0) 编辑
摘要: Dijkstra算法的模板题,嘻嘻,第一道最短路,模板题呀,本来幻想着1A 的,可惜呀,少了一个条件,一个很重要的条件,既然是最短路,有重边的话,当然是保存较短的一条边,结果我根本没注意到,直接覆盖了悲剧,……………………最短路径的四个算法,看了快一天了,终于有一点点的收获,多亏了大牛博客上的详解呀http://www.wutianqi.com/?p=1890 Dijkstra算法实现http://www.wutianqi.com/?p=1912 Bellman-Ford算法http://www.wutianqi.com/?p=2285 SPFA(Shortest Path Faster Al 阅读全文
posted @ 2011-08-12 17:21 枕边梦 阅读(217) 评论(0) 推荐(0) 编辑
摘要: 比较简单的搜索,不过我的内存开得太大了,不知道怎么缩减一开始内存开得太小了,忘了可能有一步是X*2,所以总数值可能大于100000,所以RE了#include<iostream>#include<string>#include<queue>using namespace std;int n,k;int vis[200002];struct node{ int x,cnt; node(int _x=0,int _cnt=0):x(_x),cnt(_cnt){};}; queue<node> Q;void bfs(){ memset(vis,0,si 阅读全文
posted @ 2011-08-12 00:47 枕边梦 阅读(219) 评论(0) 推荐(0) 编辑
摘要: 天啊,漏了一个条件,搞了半天,默认从第0个problem 开始做起,唉,我枚举所有的问题了……………………在DFS过程中,只要把最大深度记录下来即可,不需要其他#include<iostream>#include<string>using namespace std;int n,map[15][15],ans;bool vis[15];void dfs(int i,int j,int deep){ if(deep>ans)ans=deep; for(int k=1;k<=n;k++) { if(vis[k]||k==j) continue; if(map[i 阅读全文
posted @ 2011-08-11 23:58 枕边梦 阅读(250) 评论(0) 推荐(0) 编辑
摘要: 这题目,唉,一开始以为很简单的,就是枚举每一个KFC到M和Y的距离,求出最短的,结果TLE了之后,突然想到了双向搜索,天呐,又郁闷了很久,从来都没写过,一时不只从何下手,而且,不知道搜索时的停止条件该如果设置,结果就……回到一开始最不想做的,就是分别用调用俩次BFS,算出M和Y到每一个KFC的最短距离,再累加求最短即可这时候要注意,BFS退出的条件是遍历完所有的点,所以遇到‘@’时,把相应时间累加之后,还是要继续搜另外,有一点也是十分重要的 ,就是未必每一个KFC都是可达的,所以要多加一步判断………唉………#include<iostream>#include<string&g 阅读全文
posted @ 2011-08-11 22:53 枕边梦 阅读(347) 评论(0) 推荐(0) 编辑
摘要: 做了这么久的搜索,终于还是碰到了N皇后问题,之前一直都不敢去触碰,今天还是无奈的做了我的代码比较乱,也比较慢,看下大牛的代码吧,感觉好精炼呀,而且效率很高的说map[],下标表示所在行,值表示所在列哈,判断是否在同一对角线上居然是这么判断的,好神奇要事先打表View Code #include<iostream> #include<string>using namespace std;int n,map[20],des[20],cnt,a[11]; void DFS( int num ) { if( num == n + 1 ) { ++cnt... 阅读全文
posted @ 2011-08-11 20:46 枕边梦 阅读(202) 评论(0) 推荐(0) 编辑
摘要: 给了一个8*8的地图,时间要求却是5000ms ,似乎就是要遍历整个地图,枚举设置的封锁区域一开始是想把所有可行的路径找出来,再看一下重复路径,判断应该设置多少个封锁区域,但是一旦设置了一个封锁区域,就又出现了不同的路径出来,这样,就跟枚举有何差别呢?思路(大牛的):封锁出口或者入口周围的格子.最多需要4个封锁点.所以我们可以采取这样的策略:1.寻找一条盗贼的可行路线,如果没有,返回0.2.计算封锁出口和入口四周需要的封锁点数量,取小的一个,假设是k,k <=43.从少到多,遍历所有封锁点个数小于k的方案,验证是否是一条有效的覆盖方案(可以通过是否阻止了1中的盗贼线路进行快速验证).如果 阅读全文
posted @ 2011-08-11 17:04 枕边梦 阅读(450) 评论(0) 推荐(0) 编辑
摘要: 这题目跟之前的连连看还有hdu1072 都很像,就是路径受转弯次数的限制,这时vis[][]数组并非用来记录一个点是否已被访问过,而是记录经过该点的最少转弯次数,若经过该点存在更少的转弯次数的路径,则该点可以再次入队看代码吧#include<iostream>#include<queue>using namespace std;char map[101][101];int n,m,T,ei,ej,dir[4][2]={{1,0},{-1,0},{0,1},{0,-1}};int vis[101][101];struct node{ int x,y,di,turn;};n 阅读全文
posted @ 2011-08-11 09:43 枕边梦 阅读(184) 评论(0) 推荐(0) 编辑
摘要: 这两天被Dilworth、链和反链搞到头昏脑胀,终于有点眉目,现在来总结一下。Dilworth定理说的是:对于一个偏序集,其最少链划分数等于其最长反链的长度。Dilworth定理的对偶定理说的是:对于一个偏序集,其最少反链划分数等于其最长链的长度。Dilworth定理先不证,有空再不上来,其对偶定理证明如下:设一个偏序集S的最少反链划分数是p,最长链长度是r。1.先证p≥r。这是显然的,因为最长链长度是r,r个元素中的任意两个都可以比较,因此它们必定两两属于不同的反链,因此反链个数≥r,即p≥r。2.再证r≥p。设X1=S。找出X1的所有极小元组成集合Z1,将其从X1删之,得到X2,再找出X2 阅读全文
posted @ 2011-08-11 01:12 枕边梦 阅读(1357) 评论(0) 推荐(1) 编辑
上一页 1 ··· 21 22 23 24 25 26 27 28 29 ··· 34 下一页