摘要: 这道题和1502有些像,不同的是,1502只要找出起点到各个点的最短路径,然后判断是不是相对最长路径就能AC;这道题除了要找出起点到各点的最短路,还要求得各点到起点的最短路,然后做个和,表示来自不同农场的牛需要走的总路程还有一个不同,本题给定的点较多,Floyd会超时,于是考虑采用Dijkstra。 1 #include<iostream> 2 using namespace std; 3 #define CLR(a) memset(a,0,sizeof(a)) 4 const int INF = 1 << 29; 5 int n, m, x, vis[1005], d 阅读全文
posted @ 2012-02-16 22:39 dgsrz 阅读(146) 评论(0) 推荐(0) 编辑
摘要: 前天队里介绍了单源最短路径算法,一共涉及以下四种:Floyd-Warshall, Dijkstra, Bellman-Ford, SPFAFloyd 用来找出每对点之间的最短距离。需要一个邻接矩阵存储边。通过考虑最佳子路径实现找最短路径。算法实现:使用一个邻接矩阵存储边权值,两两之间能访问的必为一个有限的数,不能访问则为无穷大(用2^29代替)。注意自身和自身距离为0。对于一对顶点 u 和 v,看看是否存在一个断点 w 使得从 u 经过 w 到 v 比已知的路径更短(包含原始输入中从 u 直接到 v 的路程)。对所有顶点进行如上松弛操作,得到的结果是两点之间的最短路程,也可判断两点是否连通。以 阅读全文
posted @ 2012-02-16 22:13 dgsrz 阅读(249) 评论(0) 推荐(0) 编辑
摘要: 这个不能算答案,如果是比赛,这么模拟肯定玩完。纯粹是想借POJ验证下这个填数过程……题意:给出网格的宽高,主视图每列的最大高度、侧视图每行的最大高度,求满足主侧视图的最少的方块个数。 1 #include<iostream> 2 #include<queue> 3 #include<memory.h> 4 using namespace std; 5 6 int matrix[15][15]; 7 int colVal[15], rowVal[15]; 8 queue<int> qCol, qRow; 9 10 int main() 11 { 1 阅读全文
posted @ 2012-02-14 19:57 dgsrz 阅读(255) 评论(0) 推荐(0) 编辑
摘要: 题意,给你一张地图,图上空格表示连接的线段可以穿过,X表示方块而且线段不能穿过。下面给出一些待连接的方块坐标,求连线的最短线段数。我的思路是BFS,声明一个结构体保存当前的点坐标、方向和已走线段数,遇到拐弯(方向变化)就更新已走过的线段数。最初用优先队列写的,Wrong Answer到郁闷,最后单步调试发现当线段数相同时,会产生哪个点先下一步的优先级问题。最后还是用队列解决问题。这道题难点应该没有,就是输入地图时要注意下,每行有回车,输完一行记得getchar()一下。然后就是,输入给出的点坐标,第一个是纵坐标,第二个是横坐标,坐我后面的同学因为这个WA了半天,哈哈。 1 #include&l 阅读全文
posted @ 2012-02-11 21:11 dgsrz 阅读(304) 评论(0) 推荐(0) 编辑
摘要: 这道题是简单的迷宫问题。刚进校队,数据结构很多地方不明白,这是我第一次尝试写BFS,顺便试着用栈保存查找路径。效率不高(保存路径比我方法好的多得是),不过应付这道题完全够了。贴个代码,记录一下ACM路上的点滴。大牛见笑了~ 1 #include<iostream> 2 #include<queue> 3 #include<stack> 4 using namespace std; 5 6 typedef struct { int x; int y; int step; } Pos; 7 int maps[5][5], vis[5][5] = {0}, mov 阅读全文
posted @ 2012-02-11 20:54 dgsrz 阅读(311) 评论(0) 推荐(0) 编辑