Las notas de flujo máximo

Leer una tarde, medio comprendido simplemente no entienden ah. .
Primer código en vivo! Figura también construir gigante decirlo que hacerlo! !
BFS es, probablemente, pensando:
Cada BFS todo de nuevo, si también se puede encontrar respuestas a aumentar ruta se registra
cada vez que resolver juntos la respuesta, al mismo tiempo, una operación maravillosa: precursor de más menos sucesor.
Yo entiendo y siento la misma marca dfs acabada sensación de cancelación que este paso con el fin de eliminar el impacto sobre el comportamiento futuro causado, fácil de encontrar la solución óptima. `

1. Almacenamiento

struct p{
 int s,e,num;
} flow[maxn];
//没毛病
for(int i=1;i<=m;i++){
  int u,v,w;
  scanf("%d%d%d",&u,&v,&w);
  flow[i].s=u;
  flow[i].e=v;
  flow[i].num=w;
 }

2. Clave Sin embargo, no lo haré ah


//大概思路 EK(start,end) 如果还能找到就更新
int EK(int s_pos,int e_pos){
 int minn;
 while(bfs(s_pos,e_pos)){
  minn=inf;
  //结构体就是遍历的时候麻烦· 是倒着遍历的
  for(int i=e_pos;i!=s;i=flow[pre[i]].s){
   minn=min(minn,flow[pre[i]].num);
   //flow是从pre[i]出发找到的增广路
  }
  for(int i=e_pos;i!=s;i=flow[pre[i]].s){
   flow[pre[i]].num-=minn;
   //这里我不是很明白。。。
   flow[pre[i]+m].num+=minn;
  }
  max_flow+=minn;
 }
 return max_flow;
}

BFS realización concreta


bool  bfs(int s,int e){
 //初始化  只要设置成不一样的 
 s_pos=-1,e_pos=0;
 memset(wh,0,sizeof wh);
 //标记已经访问
 wh[s]=1;
 q[0]=s;//q是个队列来着
 while(s_pos!=e_pos){
  cur_pos=q[++s_pos];/*
  for(int i=1;i<=n;++i){ 
   if(!wh[i] && flow[cur_pos][i]>0){
    wh[i]=1;//标记往下走 
    pre[i]=cur_pos;
    if(i==e) return 1;
    //?
    q[++e_pos]=i;
   }
  } */
  for(int i=1;i<=2*m;i++){
   if(cur_pos == flow[i].s &&
   !wh[flow[i].e] && flow[i].num){
    wh[flow[i].e]=1;
    pre[flow[i].e]=i;
    if(flow[i].e == e) return 1;
    q[++e_pos]=flow[i].e;
   }
  }
 }
 return 0;
}

Esto todavía es tiempo de espera, espera para mí tomar otra mirada.

Publicado 24 artículos originales · ganado elogios 2 · Vistas 972

Supongo que te gusta

Origin blog.csdn.net/weixin_43521836/article/details/88914556
Recomendado
Clasificación