今天我写了一个用SPFA求最短路的小程序,Penhu同学想让我给他一个伪代码,于是我写了一个”SPFA.wdm”。为了有意思起见,我煞有其事地创造了一种完整的程序设计语言。因为wdm没有实际意义,因此改名DSL(Damn Simple Language)。写完后,Gedit自作聪明地用VHDL的语法给程序染了色,还真像那么回事。实际上,后来发现VHDL和DSL的相似度并不高,只是凑巧罢了。
Penhu同学在看到DSL后,灵感一现写出了Kubla语言的SPFA。一点很贱的是,Kubla内置的算法库里内置SPFA方法。不过,还是挺王道的,到头下来程序只有6行。分号后面是单行注释,叹号中间是多行注释。
! SPFA, in kubla language. Kubia, next generation language designed by Penhu201. SPFA, a alg to solve SSSP problem. ! (alg) ;包含一个库:alg(常见的算法) |\n/| ;输入n |\|\graph/|/| ;两个输入符号,代表输入二维数组graph d[n] <- alg`SPFA . graph . 1 . i, 2 -- n ;调用alg库的SPFA方法,传三个参数,句号作为间隔。返回值赋给d数组。 i, 1 -- n : 1 ;循环,从1到n,循环变量为i,间隔1 |/"To $i: $d[i]"\| ;输出
-- SPFA, in DSL(Damn simple language). -- DSL, a missing programming language designed by Xhacker Liu. -- SPFA, a alg to solve SSSP problem. inc io, ds io.fopen("Graph.in") -> fin io.input(fin, "%d") -> nodes ds.graph.matrix.input(fin) -> graph d[1, 2 to 10] <- 0, INFINITY ds.queue.init() -> queue ds.queue.in(queue, 1) while ~ds.queue.empty(queue) n <- ds.queue.out(queue) loop i; 1 to nodes; 1 if d[n] + graph[n][i] < d[i] d[n] + graph[n][i] -> d[i] ds.queue.in(queue, i) loop i; 2 to nodes; 1 io.output(stdout, "To $i: $d[i]")
备注:以上染色仅供参考。Kubla是用C的语法染的色,DSL使用VHDL。