7.3网络的使用~~ 调用STL库函数队列的应用

坑人的网络流~~自己看了好几遍,又模拟了好几遍终于写出了这道最基本的网络流,这也算是网络流入门了吧~~~

自己理解的网络流:

网络流:1.现将sum=0赋初值;

            2.首先使用的是bfs或dfs找出一条到达终点的路径。记录它的权重的最小值;(用BFS时路径需要用到队列来存储)。

            3.sum加上每条路径上权重的最小值;

            4.将顺序路径相减,将逆序路径相加得到正确结果;

             反复调用(2)(3)和(4),得出正确结果。

           下面  用poj上的 http://poj.org/problem?id=1273  Drainage Ditches这道题来进行讲解;

  算法分析:

1:注意如果一条道上有多条排水沟,则多条排水沟的流量相加:

2:用BFS和DFS的方法来寻找最短路径;并记录下来这条路径下的最小流量;

3:将顺序路径相减,将逆序路径相加~得出正确的结果:

连续调用直到不存在从原点到终点的最短路径为止;

post code:

#include<stdio.h>
#include<iostream>
#include<string.h>
#include<queue>
using namespace std;
int n,point,network[210][210],pre[210],flow[210];
 queue<int> myqueue;
int getmin(int a,int b )
{
    if(a<b)return a;
    else return b;
}
int Bfs()
{  
   bool used[210];
   int nowpoint,i;
   flow[1]=2000000000;
   for(i=2;i<205;i++)  
    flow[i]=-1;   
   memset(used,0,sizeof(used));
   memset(pre,0,sizeof(pre));  
   while(myqueue.empty()==0)
   myqueue.pop();
   myqueue.push(1);
   while(myqueue.empty()==0)
   {
     nowpoint=myqueue.front();
     myqueue.pop();
     for(i=1;i<=point;i++)
     {
       if(used[i]==0&&network[nowpoint][i]>0)
       {
         used[i]=1;
         pre[i]=nowpoint;
         flow[i]=getmin(flow[nowpoint],network[nowpoint][i]);
         myqueue.push(i);      
                                                      
       }
     }                                
   }
    if(flow[point]==-1)return 0;
     else return flow[point];     
}
int Edmonds_karp()
{
    int now,prea,ans=0,result,i;
    while(result=Bfs())
    {
      max++;
      ans+=result;
      now=point;
      while(now!=1)
      {
       prea=pre[now];
       network[prea][now]-=result;
       network[now][prea]+=result;
       now=prea;   
      }      
    }
   return ans;
}

int main()
{

 while( scanf("%d %d",&n,&point)!=EOF )
 { 
        
  memset(network,0,sizeof(network));      
  memset(pre,0,sizeof(pre));
  int i,x,y,z; 
    for(i=1;i<=n;i++)
    {
      scanf("%d %d %d",&x,&y,&z);
      network[x][y]+=z ;                     
    }
    printf("%d\n",Edmonds_karp());
 }
}

注意要采用 队列的库函数  这样更方便:下面是自己才用的队列的库函数:

#include<iostream>
#include<stdio.h>
#include<queue>
using namespace std;
int main()
{
  queue<int>  myqueue;
  int i,m,say;
  scanf("%d %d",&i,&m);
  myqueue.push(i);
  myqueue.push(m);
  say=myqueue.front();
  myqueue.pop();
  printf("%d\n",say);
  say=myqueue.front();
  myqueue.pop();
  printf("%d\n",say);
}

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

转载于:https://www.cnblogs.com/ysh-blog/archive/2012/07/05/2578392.html

《餐馆点餐管理系统——基于Java和MySQL的课程设计解析》 在信息技术日益发达的今天,餐饮行业的数字化管理已经成为一种趋势。本次课程设计的主题是“餐馆点餐管理系统”,它结合了编程语言Java和数据管理系统MySQL,旨在帮助初学者理解如何构建一个实际的、具有基本功能的餐饮管理软件。下面,我们将深入探讨这个系统的实现细节及其所涉及的关键知识点。 我们要关注的是数据设计。在“res_db.sql”文件中,我们可以看到数据的结构,可能包括菜品表、订单表、顾客信息表等。在MySQL中,我们需要创建这些表格并定义相应的字段,如菜品ID、名称、价格、存等。此外,还要设置主键、外键来保证数据的一致性和完整性。例如,菜品ID作为主键,确保每个菜品的唯一性;订单表中的顾客ID和菜品ID则作为外键,与顾客信息表和菜品表关联,形成数据间的联系。 接下来,我们来看Java部分。在这个系统中,Java主要负责前端界面的展示和后端逻辑的处理。使用Java Swing或JavaFX可以创建用户友好的图形用户界面(GUI),让顾客能够方便地浏览菜单、下单。同时,Java还负责与MySQL数据进行交互,通过JDBC(Java Database Connectivity)API实现数据的增删查改操作。在程序中,我们需要编写SQL语句,比如INSERT用于添加新的菜品信息,SELECT用于查询所有菜品,UPDATE用于更新菜品的价格,DELETE用于删除不再提供的菜品。 在系统设计中,我们还需要考虑一些关键功能的实现。例如,“新增菜品和价格”的功能,需要用户输入菜品信息,然后通过Java程序将这些信息存储到数据中。在显示所有菜品的功能上,程序需要从数据获取所有菜品数据,然后在界面上动态生成列表或者表格展示。同时,为了提高用户体验,可能还需要实现搜索和排序功能,允许用户根据菜品名称或价格进行筛选。 另外,安全性也是系统设计的重要一环。在连接数据时,要避免SQL注入攻击,可以通过预编译的PreparedStatement对象来执行SQL命令。对于用户输入的数据,需要进行验证和过滤,防止非法字符和异常值。 这个“餐馆点餐管理系统”项目涵盖了Java编程、数据设计与管理、用户界面设计等多个方面,是一个很好的学习实践平台。通过这个项目,初学者不仅可以提升编程技能,还能对数据管理和软件工程有更深入的理解。在实际开发过程中,还会遇到调试、测试、优化等挑战,这些都是成长为专业开发者不可或缺的经验积累
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值