随笔分类 - 模板
摘要:int graph[narray][narray]; //邻接阵 int indegree[narray]; //记录顶点的入度 int n; //n为顶点个数 memset(graph,0,sizeof(graph));memset(indegree,0,sizeof(indegree));for(i=1;i<=n;++i) //遍历n次每次找出一个顶点 { for(j=1;j<=n...
阅读全文
摘要:#include <vector>using namespace std;typedef struct edge{ int v; int w;}edge;#define narray 1001const int maxData = 0x7fffffff; vector<edge> adj[narray]; //邻接表 int m,n; //m为边数,n为顶点数 int d[...
阅读全文
摘要:typedef struct edge{ int a; int b; int value;}edge;edge edges[earraysize];int final[narraysize]; //存储父节点 int nodecount[narraysize]; //存储该节点孩子结点的个数 bool cmp(edge a,edge b){ return a.value<b.value;}i...
阅读全文
摘要:int graph[arraysize][arraysize];bool final[arraysize];int d[arraysize]; int maxData =0x7fffffff;int N; //结点个数 int prim(int src){ int sum = 0; int minData; int i,j; int v; memset(final,0,sizeof(final))...
阅读全文
摘要:#include <iostream>#include <algorithm>#include <queue>#include <climits> //引入<climits>的类,注意如果引入<limits>会出现编译错误 #include <cstdio>//#include <conio.h>usi...
阅读全文
摘要:int maxData=10000000;int graph[arraysize][arraysize];int d[arraysize];int pre[arraysize]; //存储节点前驱 bool final[arraysize];int t,n;void Dij(int src){ int i,j; int minData; int v; memset(final,0,sizeof(f...
阅读全文
摘要:int maxData = 1000000000; int w[arraysize][arraysize]; //权值 int match[arraysize]; //保存匹配信息,其中i为Y中的顶点标号,match[i]为X中顶点标号 int lx[arraysize],ly[arraysize],slack[arraysize]; //lx[]为左顶点的顶标,ly[]为有顶点的顶标,slack...
阅读全文
摘要:#define parray 101#define narray 301int map[parray][narray]; //存储邻接矩阵 int match[narray]; //存储匹配 bool final[narray]; //用于标记DFS int p,n; //p代表二分图左半顶点个数,n代表二分图右半顶点个数 //利用DFS算法找增广路路径 bool DFS(int p) { int...
阅读全文
摘要:void SPFA(int src){ queue<int> myqueue; int i,j; memset(final,0,sizeof(final)); memset(pre,-1,sizeof(pre)); myqueue.push(src); for(i=0;i<=ncount;++i) //SPFA算法与Dij不同,SPFA初始化时将除源点以外所有点的最短距离初始化无...
阅读全文
摘要:步骤0:初始可行0流步骤1:如果不存在最小费用流,则计算结束,已经找到最小费用流;否则,用最短路算法(由于存在负圈,只能采用SPFA或者Bellman-Ford算法)在残留网络中找到源点到终点的最小费用可增广路,转步骤2。步骤2:沿找到的最小费用可增广路增流,并转步骤1 。int maxData = 10000000;bool final[105]; //SPFA算法中标识结点是否在队列中 int...
阅读全文
摘要:const int maxn=201; const int maxm=201;struct node{ int x,y,f,op,next; //x起点,y终点,f权值,next是以x为起点的上一条边在g中的位置,op是反向边在g中的下标位置 }g[maxm*2];//first[]存储的是以x为起点的最后一条边的在数组g中的下标 //sumd[]用于记录表示标号为i的顶点数有多少个,用于间隙优化...
阅读全文
摘要:#include <iostream>#include <queue>#define msize 1024 //最大顶点数目using namespace std;int d[msize]; //标号int r[msize][msize]; //残留网络,初始为原图int num[msize]; //num[i]表示标号为i的顶点数有多少int pre[msize]; //...
阅读全文
摘要:有关最大流的解释看《算法导论》和博客中的相关内容 模板(C++):#include <iostream>#include <queue>//#include <conio.h>using namespace std;#define arraysize 201int maxData = 0x7fffffff;int capacity[arraysize][arra...
阅读全文
摘要:算法简介 SPFA(Shortest Path Faster Algorithm)是Bellman-Ford算法的一种队列实现,减少了不必要的冗余计算。 它可以在O(kE)的时间复杂度内求出源点到其他所有点的最短路径,可以处理负边。算法流程 SPFA对Bellman-Ford算法优化的关键之处在于意识到:只有那些在前一遍松弛中改变了距离估计值的点,才可能引起他们的邻接点的距离估计值的改变。因此,算...
阅读全文
摘要:Bellman-Ford算法流程分为三个阶段:(1) 初始化:将除源点外的所有顶点的最短距离估计值 d[v] ←+∞, d[s] ←0;(2) 迭代求解:反复对边集E中的每条边进行松弛操作,使得顶点集V中的每个顶点v的最短距离估计值逐步逼近其最短距离;(运行|v|-1次)(3) 检验负权回路:判断边集E中的每一条边的两个端点是否收敛。如果存在未收敛的顶点,则算法返回...
阅读全文
浙公网安备 33010602011771号