HTML の要素が階層をなしているとき、下の階層にイベントが起こると 上の階層にも順番にイベントが発生する。
これを防ぐには、IE だと cancelBubble = true で、 DOM だと stopPropagation() を使う。
var f = function(e){ e = e ? e : event; if(typeof e.cancelBubble !== 'undefined'){ e.cancelBubble = true; } else if(e.stopPropagation){ e.stopPropagation(); } alert('hogehoge'); } document.getElementById('foo').onclick = f; document.getElementById('bar').onclick = f;
<div id=foo> aaa <div id=bar> bbb </div> </div>
http://mput.dip.jp/mput/?date=20051007#p01 より。 グラフ理論はあまり知りませんが、ちょっと考えてみました。
紙でごにょごにょやってみたらできました。 以下のとおりに接続できるのでグラフ的です。
.abcdefg a.*****. b*..*... c*.....* d**..*** e*..*... f*..*..* g..**.*.
こんな感じでいいのかな……? 接続行列の第i行成分の和が与えられた配列のi番目(1-origin)になることを考えて、 接続行列を上から埋めていきます。
def make_comb(size, num) raise "error" if size < num if size == num [Array.new(size, 1)] elsif num == 0 [Array.new(size, 0)] else make_comb(size-1, num-1).map{|e| [1] + e} + make_comb(size-1, num).map{|e| [0] + e} end end class Array def graphical? return false if self.any?{|e| e < 0 or self.size <= e} return true if self.size == 1 and self.first == 0 make_comb(self.size - 1, self.first).each do |b| partial = [] self[1..-1].zip(b){|x| partial << (x[0] - x[1])} return true if partial.graphical? end return false end end p [5, 2, 3, 2, 3, 2, 5].graphical?
Haskellは知らないです。いかんなぁ。