一个Petri网是一个计算模型,用来说明并发事件,每个Petri网包含一些库所,变迁,和一些有向边,用来连接库所到变迁,和变迁到库所,每个库所能够包含0个或多个令牌,在这个问题中,你将会被给出1个或多个Petri网的描述,对于每个描述,你将要模拟NF次变迁的发生,然后输出留在库所里的令牌数量,如果这个Petri网在NF次变迁发生之前就死了,你将按事实输出。
一个Petri网是一个计算模型,用来说明并发事件。每个Petri网包含一些库所(被表示成圆圈),变迁(被表示成黑色的矩形),和一些有向边,用来连接库所到变迁,和变迁到库所。每个库所能够包含0个或多个令牌(被表示成黑点)。 这里有2个例子: 在上面的第一个Petri网中,有2个库所(P1 和 P2)和2个变迁(T1 和 T2)。P1初始有1个令牌。P2没有令牌。P1是变迁T1的输入库所,P2是T1的输出库所。在第二个例子中,有3个库所和3个变迁,P1有3个令牌。T2有2个输入库所,2个都是P2。 一个Petri网的操作 每个Petri网的变迁要么被允许,要么不被允许。一个变迁被允许当且仅当每个输入库所都至少有1个令牌。任何被允许的变迁可以发生。如果有多个变迁被允许,任何一个都可能发生。当一个变迁发生时,每个输入库所都会移除1个令牌,每个输出库所都会增加1个令牌。这会有效地利用原子能来完成,作为一个事件。如果没有一个变迁被允许,这个Petri网就被认为是死的。 最上面那个例子,只有T1是被允许的。当它发生时,会从P1移除1个令牌,给P2增加1个令牌。然后T2就被允许了。当它发生时,会从P2移除1个令牌,给P1增加1个令牌。显然,这个Petri网将会永远重复这个循环。 下面那个例子更加有趣。T1被允许然后发生,有效地移动1个令牌给P2。在这个时候,T1仍然是唯一被允许的变迁(T2被允许需要P2有2个令牌)。T1再次发生,在P1剩下1个令牌,P2中有2个令牌。现在,T1和T2都被允许。假设T2发生,从P2移除2个令牌,给P3增加1个令牌。现在T1和T3都被允许。直到没有变迁被允许,你应该能看到在9次变迁发生后,在P2仅留下1个令牌。(注意到,如果当T1和T2都被允许的时候,T1代替了T2发生,这个结果也同样是在9次变迁发生后。) 在这个问题中,你将会被给出1个或多个Petri网的描述。对于每个描述,你将要模拟NF(0 < NF < 1000)次变迁的发生,然后输出留在库所里的令牌数量。如果这个Petri网在NF次变迁发生之前就死了,你将按事实输出。