
图论——最短路径
文章平均质量分 63
zhenzhenjiajia888
这个作者很懒,什么都没留下…
展开
-
无向图的临接矩阵存储法
#include using namespace std;int visit[101];int map[101][101];int n,m,a,b,sum=0;void dfs(int cur){ int i; cout<<cur<<' '; sum++; if(sum==n) return; for(i=1;i<=n;i++)原创 2016-10-26 19:35:30 · 464 阅读 · 0 评论 -
杭电oj1869 六度分离(folyd)
不知道为什么刚开始就不对,都不知道改了那里就对了,不管了,因为数据就不超过100,所以用了folyd 。#include using namespace std;int main(){ int inf=99999999; int map[1005][1005]; int n,m,a,b; int i,j,k,flag=0; while(scanf(原创 2016-11-01 17:04:49 · 363 阅读 · 0 评论 -
hd 2544 最短路径(简单dij)
很简单,直接模版#include using namespace std;int main(){ int inf=9999999; int map[1005][1005]; int visit[1005]; int dis[1005]; int i,j,n,m,a,b,c,min_,u = 0; while(scanf("%d%d",&n,原创 2016-11-01 15:45:27 · 314 阅读 · 0 评论 -
一个人的旅行 hd2066
简单的一道题,但是还是看了下别人的代码才做出来,水,这个题方法挺多的,但是最开始看到这个题想用folyd,但是会超时,因为是1000,然后想了想dij,然后试了下,发现个大问题,就是dij是对于一个点的所有最短路径,而最开始的出发点又不确定,当把这些出发点输入进去后,我凌乱了,结果还是用了folyd,稍微剪枝,然后遍历寻找符合的结果。#include #define inf 9999999原创 2016-10-31 20:59:47 · 355 阅读 · 0 评论 -
Dijkstra算法-松弛边寻找一个点到任意点的最短距
floyd -w 是求任意点到任意点的最短距离,因为复杂度较高,所以在只求一个点到任意点的距离的时候容易超时,Dijkstra算法就是解决一个点到任意点的距离的问题,于floyd-w的算法一样用临界矩阵存储图,我们还需要一个一位数组来存储原点(1)到任意点的距离然后依次对dis中最小的数的点开始寻找结点然后开始依次松弛动态图为对于下图没有出边所以代码中i原创 2016-10-27 20:26:31 · 2553 阅读 · 0 评论 -
bellman-ford
bellman-ford是为了解决负权边的问题,而这个问题dij却不能解决。基本代码#include using namespace std;int main(){ int dis[100],s[100],u[100],v[100]; int n,m,i,j; cin>>n>>m; for(i=1;i<=n;i++) { cin原创 2016-10-31 15:55:15 · 290 阅读 · 0 评论 -
Floyd-Warshall
这个算法是用来求任意两点的最短距离问题,可以用dfs和bfs但是需要搜索所有点到所有点的距离,即对任意两点是用dfs或bfs会用很多次,所以有了这个算法,时间复杂度是o(n^3),对于下面的图,画出临界矩阵存储法当我们规定,任意两点只允许经过点1的时候的存储最终核心代码 for(k=1;k<=n;k++) { for(i=1;i<=n;i++原创 2016-10-27 18:24:45 · 355 阅读 · 0 评论 -
图论dfs和bfs的感想
对于最开始的图的基本遍历dfs和bfs的顺序不一样,但是遍历的终止条件都是一样的,那就是if(sum==n) return;当作题的时候有得是无向图有得是有向图,他们的区别就是在初始化地图的时候,在初始化map[a][b]=?后用不用初始化map[b][a]=?(无向图),因为她们是在寻找到达目的地n的最短的路径所以对于dfs终止条件是if(cur==end),判断sum于min,对于bfs终止条原创 2016-10-27 17:51:16 · 419 阅读 · 0 评论 -
最短航班 bfs
无向图,从一个地方到达另一个地方,给出了航班路线问怎么走最进#include using namespace std;struct node{ int x; int s;};struct node que[10001];int map[1000][1000];int visit[1000];int main(){ int i,j,n,m,k,g;原创 2016-10-27 17:40:17 · 698 阅读 · 0 评论 -
城市地图-图的深度优先遍历
因为这个图是有向图,无向图和有向图代码很像,当这个图是无向图的时候,需要把输入的改成map[a][b]=c ,map[b][a]=c这样就是无向的,当他是无向图的时候最短路程不是1-2-5而是1-3-5#include using namespace std;int visit[101];int map[101][101];int n,m,a,b,c,cur;int dis,min_原创 2016-10-26 20:41:56 · 500 阅读 · 0 评论 -
杭电oj2680 Choose the best route(did逆图)
这个题真是醉了,优化的folyd超时,使用一个新的想法,如果有多个出发点对应一个终点,可以逆过来建图,注意图初始化就好。#include#include#include#define INF 0x3f3f3f3fusing namespace std;int map[1010][1010],dis[1010],vis[1010];int m,n,e,s[1010];void di原创 2016-11-02 19:17:52 · 307 阅读 · 0 评论