算法实现题8-5 圆桌问题(习题 8-15)
´问题描述:
假设有来自 n 个不同单位的代表参加一次国际会议。每个单位的代表数分别为
n i ri
, , 2 , 1 ,  = 。会议餐厅共有 m张餐桌,每张餐桌可容纳 ) , , 2 , 1 ( m i ci
 = 个代表就餐。
为了使代表们充分交流, 希望从同一个单位来的代表不在同一个餐桌就餐。 试设计一个算法,
给出满足要求的代表就餐方案。
´编程任务:
对于给定的代表数和餐桌数以及餐桌容量,编程计算满足要求的代表就餐方案。
´数据输入:
由文件input.txt提供输入数据。文件第1行有 2 个正整数m和 n,m表示单位数,n表
示餐桌数,1<=m<=150, 1<=n<=270。文件第 2 行有m个正整数,分别表示每个单位的代表
数。文件第3行有n个正整数,分别表示每个餐桌的容量。
´结果输出:
程序运行结束时,将代表就餐方案输出到文件 output.txt 中。如果问题有解,在文件第
1行输出1,否则输出0。接下来的m行给出每个单位代表的就餐桌号。如果有多个满足要
求的方案,只要输出1个方案。
输入文件示例  输出文件示例 
输入文件示例
input.txt
4 5
4 5 3 5
3 5 2 6 4

输出文件示例
output.txt
1
1 2 4 5
1 2 3 4 5
2 4 5
1 2 3 4 5

————————————————————

 1 Program Stone;
 2 var flow,n,m,s,t,tot:longint;
 3     map:array[0..500,0..500]of longint;
 4     dis,cur,vh:array[0..1000]of longint;
 5  procedure init;
 6  var i,j,k:longint;
 7   begin
 8     readln(m,n);
 9     s:=0;t:=m+n+1;
10     for i:=1 to m do
11      begin
12        read(j);
13        map[s,i]:=j;
14        inc(tot,j);
15      end;
16     for i:=1 to n do
17      begin
18        read(j);
19        map[i+m,t]:=j;
20      end;
21     for i:=1 to m do
22      for j:=1 to n do
23        map[i,j+m]:=1;
24   end;
25  function min(x,y:longint):longint;
26   begin
27    if x<y then min:=x else min:=y;
28   end;
29  function aug(x,nf:longint):longint;
30  var i,j,d,l,minh,ins:longint;
31   begin
32     if x=t then exit(nf);
33     l:=nf;
34     for i:=cur[x] to t do
35      if (map[x,i]>0)and(dis[i]+1=dis[x]) then
36      begin
37          cur[x]:=i;
38          d:=aug(i,min(l,map[x,i]));
39          dec(map[x,i],d);
40          inc(map[i,x],d);
41          dec(l,d);
42          if (dis[s]=t+1)or(l=0) then exit(nf-l);
43      end;
44     if l=nf then
45      begin
46        minh:=t+1;
47        for i:=s to t do
48          if (map[x,i]>0)and(minh>dis[i]) then begin minh:=dis[i];ins:=i;end;
49        cur[x]:=ins;
50        dec(vh[dis[x]]);
51        if vh[dis[x]]=0 then dis[s]:=t+1;
52        dis[x]:=minh+1;
53        inc(vh[dis[x]]);
54      end;
55     aug:=nf-l;
56   end;
57  procedure print;
58  var i,j:longint;
59   begin
60     if flow<>tot then write(0)
61                  else begin
62                        writeln(1);
63                        for i:=1 to m do
64                        begin
65                         for j:=1 to n do
66                          if map[i,j+m]=0 then write(j,' ');
67                         writeln;
68                        end;
69                       end;
70   end;
71 Begin
72  assign(input,'prog85.in');assign(output,'prog85.out');
73  reset(input);rewrite(output);
74   init;
75   vh[0]:=t+2;
76   while dis[s]<t+1 do inc(flow,aug(s,maxint));
77   print;
78  close(input);close(output);
79 end.

转载于:https://www.cnblogs.com/yesphet/p/5236402.html

圆桌问题 2011-12-29相关推荐

  1. 英雄远征(9:20--11:29)30级体验

    英雄远征(9:20--11:29)30级体验 1级任务指引提升等级,体验游戏.   2级任务指引领取装备礼包.(亮点)   3级任务指引领取武器(亮点)   4级任务指引玩家领取武器并使用.(亮点) ...

  2. 我在Salira的800天(2009.5.20~2011.7.29)

     我在Salira的800天(2009.5.20~2011.7.29) 一.感谢篇 Content 零.序 一.感谢篇 1. Salira 2. L 3. J 二.工作篇 三.研究与学习篇 四.总结篇 ...

  3. 【日志】2011.12.24

    2011.12.2 4 1 . de2-115-TV的视频信号输出已经改到了LTM上了. 2 . 已经将算法模块整理修改完毕,随后移植至de2-70和de2-115上. 转载于:https://www ...

  4. 随笔--2011.12.21

    2011年12月21日对于CSDN来说是一个严重受挫点,中国最大的程序员交流平台尽然被黑客入侵,600万的用户资料以明文形势在各大网络疯狂传播!CSDN公开致歉说CSDN网站早期使用过明文密码,使用明 ...

  5. Cheatsheet: 2011 12.01 ~ 12.12

    Web memcache internals Beyond YSlow - Squeeeezing out website network performance The Fastest Webser ...

  6. 2011 - 12 - 12记录2011 - 12 - 11

    1. argc与argv main函数的形参(int argc,char * argv[]). main 函数有两种写法:1s.默认写法:int main() 2.标准写法:main(int argc ...

  7. 2017/12/29

    2019独角兽企业重金招聘Python工程师标准>>> 2017/12/29 Firday weather: light rain ! 1.需求: 写一个脚本实现如下功能: 输入一个 ...

  8. 2010.12.29(2)——— android GridView

    2010.12.29(2)--- android 可伸缩的GridView 用 GridView 来实现九宫格布局 并且一个格显示一个图片和一行字 [b]1.ImageAdapter[/b] pack ...

  9. 2019.12.29 BMR计算

    这个 示例是进行BMR计算,主要是获取用户的输入数据,对获取的数据进行分隔,然后进行字符转换进行求解 本示例涉及知识点: ①整数.浮点数.数值运算 ②if-else语句.while语句.input语句 ...

  10. English Learning - Day23 作业打卡 2022.12.29 周四

    English Learning - Day23 作业打卡 2022.12.29 周四 引言 一.写出适当的介词 1. 体会下列介词的侧重点 在黎明 在晚八点钟 在午夜时分 长达两个星期 在周一 在新 ...

最新文章

  1. jquery对所有input type=text的控件赋值
  2. Python测试框架pytest(01)简介、安装、快速入门
  3. 创建一个显示所有预定义WPF颜色的ListBox
  4. 媒体转码升级为媒体处理
  5. java只有值传递_面试官:为什么 Java 中只有值传递?
  6. unity shader 编辑器扩展类 ShaderGUI
  7. oracle读取表空间物理文件中数据,shell脚本读取oracle数据库数据写入到文件中
  8. Oracle date日期类型使用
  9. Ubuntu设置局域网Windows共享文件Samba
  10. HoverTree开发日志之验证码
  11. jQuery CheckBoxList 全选 反选
  12. TX2不支持TensorRT INT8,int8 官方参考
  13. 最有效的Safari的广告拦截插件
  14. 基于单片机的GPS开发 (five) GPS数据获取解析思路
  15. 解决Hexo无法显示图片的几种方案
  16. 计算机税率函数,2018最新按5000元个税Excel计算公式,帮你整理齐了!
  17. An exception occurred while acquiring a poolable resource. Will retry.
  18. wmv格式+java_Java调用ffmepg+mencoder视频格式转换(*)
  19. 将博客搬至CSDN_莫枫恋_新浪博客
  20. 计算机应用蘑菇丁周报,蘑菇钉周记(共10篇)

热门文章

  1. 深度窥探 QuickTest 视图(1)
  2. 2018 ACM 国际大学生程序设计竞赛上海大都会赛重现赛 F Color it
  3. ci 文件类型在禁止上传之列
  4. Java中的代码点和代码单元
  5. 基于easyui开发Web版Activiti流程定制器详解(四)——页面结构(下)
  6. python 线程指南
  7. 活学活用,CSS清除浮动的4种方法
  8. C++ 中内存分配和回收
  9. 在SQL中使用convert函数进行日期的查询
  10. 别被布线“老思想”拌倒