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は知らないです。いかんなぁ。