#include <stdio.h>
#include <stdlib.h>
#include <limits.h>
//图节点
typedef struct AdjacentNodeType
{
int index;
struct AdjacentNodeType *nextNeighbor;
}AdjacentNode,*pAdjacentNode;
typedef struct VertexNode
{
int index;
char name;
int h;
int e;
pAdjacentNode current;
pAdjacentNode head;
struct VertexNode *next;
struct VertexNode *pre;
}Vertex,*pVertex;
//图
typedef struct
{
int vn;
int **E; //容量C作为边矩阵的值
pVertex *V;
int **f; //流值
int **rE; // 残留边
pVertex L; //前置重贴标签用到的链表,在initGraph()中初始化
}Graph,*pGraph;
void generateAdjacentList(pGraph g,int s,int t)
{
for(int i=0;i<g->vn;i++)
{
for(int j=0;j<g->vn;j++)
{
if(g->E[i][j]>0 || g->E[j][i]>0)
{
pAdjacentNode adj=(pAdjacentNode)malloc(sizeof(AdjacentNode));
adj->index=j;
adj->nextNeighbor=g->V[i]->head;
g->V[i]->head=adj;
}
}
}
}
//根据算法导论 图26-6初始化图
pGraph initGraph()
{
pGraph g=(pGraph)malloc(sizeof(Graph));
g->vn=6;
int s=0,t=g->vn-1;
pVertex vs=(pVertex)malloc(sizeof(Vertex));
vs->name='s';
vs->index=0;
pVertex v1=(pVertex)malloc(sizeof(Vertex));
v1->name='1';
v1->index=1;
pVertex v2=(pVertex)malloc(sizeof(Vertex));
v2->name='2';
v2->index=2;
pVertex v3=(pVertex)malloc(sizeof(Vertex));
v3->name='3';
v3->index&#
算法导论 最大流 前置重贴标签法
最新推荐文章于 2021-04-08 10:54:45 发布
本文介绍了如何使用C语言实现基于算法导论中的前置重贴标签法求解最大流问题。通过初始化图、残余网络、初始化前向流、重新标记和推流等步骤,详细展示了算法的具体过程。
摘要由CSDN通过智能技术生成