[POJ1094 Sorting It All Out]

[题目来源]:POJ1094

[关键字]:拓扑排序

[题目大意]:给出n各字母和一系列不等式,判断是否能确定所有字母顺序输出在最早在第几个不等式处判断出或是否有矛盾最早在哪判断出,还是不能确定顺序。

//=====================================================================================================

[分析]:将每个不等式从小到大亮连一条边,就成了一个有向图,就是判断是否是一个无环图。每加入一个条件就进行拓扑排序,顺序确定就是完成唯一拓扑排序,矛盾就是有环,不确定就是拓扑序不唯一。注意的是,成立和矛盾可以一下看出,不确定需把所有条件都用完才行。还有即使不唯一也要判断是否有环,否则会WA。

[代码]:

ContractedBlock.gifExpandedBlockStart.gifView Code
  1 program Project1;
2 var
3 n, m, goal: longint;
4 ch: char;
5 d, d2: array[0..30,0..30] of boolean;
6 q: array[0..1000] of longint;
7 r, r2: array[0..30] of longint;
8
9 procedure bfs;
10 var
11 h, t, i, temp: longint;
12 begin
13 h := 1;
14 t := 0;
15 fillchar(q,sizeof(q),0);
16 r2 := r;
17 for i := 1 to n do
18 if r2[i] = 0 then
19 begin
20 inc(t);
21 q[t] := i;
22 end;
23 if t > 1 then goal := 2;
24
25 d2 := d;
26 while h <= t do
27 begin
28 temp := 0;
29 for i := 1 to n do
30 if d2[q[h],i] then
31 begin
32 dec(r2[i]);
33 d2[q[h],i] := false;
34 if r2[i] = 0 then
35 begin
36 inc(t);
37 q[t] := i;
38 inc(temp);
39 if temp = 2 then goal := 2;
40 end;
41 end;
42 inc(h);
43 end;
44 if t < n then
45 goal := 1
46 else
47 if goal <> 2 then goal := 3;
48 end;
49
50 procedure init;
51 var
52 i, j, xx, yy: longint;
53 x, ch, y: char;
54 begin
55 fillchar(d,sizeof(d),false);
56 fillchar(r,sizeof(r),0);
57 for i := 1 to m do
58 begin
59 goal := 0;
60 readln(x,ch,y);
61 xx := ord(x)-ord('A')+1;
62 yy := ord(y)-ord('A')+1;
63 d[xx,yy] := true;
64 inc(r[yy]);
65 bfs;
66 case goal of
67 1:begin
68 writeln('Inconsistency found after ',i,' relations.');
69 for j := i+1 to m do readln(x,ch,y);
70 exit;
71 end;
72 2:continue;
73 3:begin
74 write('Sorted sequence determined after ',i,' relations: ');
75 for j := 1 to n do write(chr(q[j]-1+ord('A')));
76 writeln('.');
77 for j := i+1 to m do readln(x,ch,y);
78 exit;
79 end;
80 end;
81 end;
82 writeln('Sorted sequence cannot be determined.');
83 end;
84
85 procedure print;
86 var
87 i, j: longint;
88 begin
89 for i := 1 to n do
90 begin
91 for j := 1 to n do write(d[i,j],' ');
92 writeln;
93 end;
94 end;
95
96 begin
97 //assign(output,'d:\1.out');rewrite(output);
98 readln(n,m);
99 while n+m <> 0 do
100 begin
101 init;
102 //print;
103 readln(n,m);
104 end;
105 //close(output);
106 end.



转载于:https://www.cnblogs.com/procedure2012/archive/2011/10/18/2215993.html

考虑柔性负荷的综合能源系统低碳经济优化调度【考虑碳交易机制】(Matlab代码实现)内容概要:本文围绕“考虑柔性负荷的综合能源系统低碳经济优化调度”展开,重点研究在碳交易机制下如何实现综合能源系统的低碳化与经济性协同优化。通过构建包含风电、光伏、储能、柔性负荷等多种能源形式的系统模型,结合碳交易成本与能源调度成本,提出优化调度策略,以降低碳排放并提升系统运行经济性。文中采用Matlab进行仿真代码实现,验证了所提模型在平衡能源供需、平抑可再生能源波动、引导柔性负荷参与调度等方面的有效性,为低碳能源系统的设计与运行提供了技术支撑。; 适合人群:具备一定电力系统、能源系统背景,熟悉Matlab编程,从事能源优化、低碳调度、综合能源系统等相关领域研究的研究生、科研人员及工程技术人员。; 使用场景及目标:①研究碳交易机制对综合能源系统调度决策的影响;②实现柔性负荷在削峰填谷、促进可再生能源消纳中的作用;③掌握基于Matlab的能源系统建模与优化求解方法;④为实际综合能源项目提供低碳经济调度方案参考。; 阅读建议:建议读者结合Matlab代码深入理解模型构建与求解过程,重点关注目标函数设计、约束条件设置及碳交易成本的量化方式,可进一步扩展至多能互补、需求响应等场景进行二次开发与仿真验证。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值