SPOJ 206 "Bitmap"

問題:https://www.spoj.pl/problems/BITMAP/
たぶん合ってるけど遅すぎて通らない.

for {gets stdin t} {$t>0} {incr t -1} {
	#puts [time {
	if ![expr [string compare [set s [gets stdin]] ""]] then {
		gets stdin s
	}
	scan $s {%s %s} n m
	set queue [dict create] 
	for {set i 0} {$i<$n} {incr i} {
		set in [split [gets stdin] ""]
		for {set j 0} {$j<$m} {incr j} {
			set b($i,$j) [lindex $in $j]
			set a($i,$j) 0
			if $b($i,$j) {
				set k [expr {$i-1}]
				if {$i&&!$b($k,$j)} {
					dict set queue "$k $j" 1
				}
				set k [expr {$j-1}]
				if {$j&&!$b($i,$k)} {
					dict set queue "$i $k" 1
				}
			} else {
				set k [expr {$i-1}]
				if {$i&&$b($k,$j)} {
					dict set queue "$i $j" 1
				}
				set k [expr {$j-1}]
				if {$j&&$b($i,$k)} {
					dict set queue "$i $j" 1
				}
			}
		}
	}
	while {[dict size $queue]>0} {
		dict for {l z} $queue {
			scan $l {%s %s} x y
			set a($x,$y) $z
			set b($x,$y) 1
		}
		set tmp $queue
		set queue [dict create]
		dict for {l z} $tmp {
			scan $l {%s %s} x y
			set z [expr {$z+1}]
			set k [expr {$x-1}]
			if {$x&&!$b($k,$y)} {
				dict set queue "$k $y" $z
			}
			set k [expr {$x+1}]
			if {$k<$n&&!$b($k,$y)} {
				dict set queue "$k $y" $z
			}
			set k [expr {$y-1}]
			if {$y&&!$b($x,$k)} {
				dict set queue "$x $k" $z
			}
			set k [expr {$y+1}]
			if {$k<$m&&!$b($x,$k)} {
				dict set queue "$x $k" $z
			}
		}
	}
	for {set i 0} {$i<$n} {incr i} {
		set result [list]
		for {set j 0} {$j<$m} {incr j} {
			lappend result $a($i,$j)
		}
		puts $result
	}
	#}]
}