(57)【特許請求の範囲】
【請求項１】
コンピュータで囲碁の死活判定を行う、囲碁の死活判定システムであって、
前記死活判定システムは、
対局者による入力を受け付ける入力受付部と、
目標石の死活判定を行う死活判定処理部と、
前記死活判定処理部における死活判定の結果を出力する出力処理部と、を備えており、
前記死活判定処理部は、
前記対局者による入力に基づいて判定対象の石の設定を受け付け、さらにその判定対象のうち特定の石を目標石として設定を受け付け、
前記受け付けた目標石に対する死活判定処理を実行し、
前記目標石のうちの一つが取られるか、または目標石のすべてが取られないか、を判定する、
ことを特徴とする囲碁の死活判定システム。
【請求項２】
コンピュータを、
対局者による入力を受け付ける入力受付部、
目標石の死活判定を行う死活判定処理部、
前記死活判定処理部における死活判定の結果を出力する出力処理部、として機能させる囲碁の死活判定プログラムであって、
前記死活判定処理部は、
前記対局者による入力に基づいて判定対象の石の設定を受け付け、さらにその判定対象のうち特定の石を目標石として設定を受け付け、
前記受け付けた目標石に対する死活判定処理を実行し、
前記目標石のうちの一つが取られるか、または目標石のすべてが取られないか、を判定する、
ことを特徴とする囲碁の死活判定プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、コンピュータ上で囲碁の対局ゲームを行う場合の、囲碁の死活判定システムに関する。
【背景技術】
【０００２】
コンピュータ上でコンピュータを相手に、あるいはネットワークを介してほかのユーザを相手に、囲碁の対局ゲームを行うことが出来る。囲碁は陣地の広さを争うゲームであるが、ある局面において自らの石を活かすためにはどうしたらよいのか、あるいは相手の石を殺すためにはどうしたらよいのか、を常に考慮しながら戦略を立案し、着手を行うことが重要である。
【０００３】
例えば、自らの石が死んでいることを早期に判断できれば，当該陣地を放棄し、別の場所に集中を行うことが出来、全体的な戦略としても非常に効率的である。そのため、自らの石、あるいは相手の石が活きているのか死んでいるのかを判断することは、囲碁においては極めて重要である。なお石が活きているのか死んでいるのかを「死活」という。また活きている石とは、相手方の着手により取られない石または取られても新たに相手方に取られない石を生じうる石のことであり、死んでいる石とは、活き石以外であって、相手方の着手により取られる石のことである。
【０００４】
また囲碁のゲーム中の戦略のほかにも、終局状態においても石の死活を判断しなくてはならず、その観点からも石の死活は重要である。そのため詰碁と呼ばれる、部分的な死活を問う問題もある。
【０００５】
このように、囲碁において、石の死活を判定することは極めて重要であるが、実際に石の死活を判定することは容易ではない。特にコンピュータが自動的に行うことは難しい。そこで、例えば下記特許文献、非特許文献にあるように石の死活にかかる処理を行うシステムが開示されている。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】特開平６−１２６０２１号公報
【特許文献２】特開平１０−２７２２５９号公報
【特許文献３】特開平１１−２２６２６２号公報
【特許文献４】特開２００２−２９２１２６号公報
【非特許文献】
【０００７】
【非特許文献１】株式会社パンダネット、”実戦詰碁「死活ナビ」”、[online]、インターネット＜ＵＲＬ：http://www.pandanet.co.jp/members/lifedeath/index.htm＞
【非特許文献２】トーマス・ウルフ（Thomas Wolf）、”ＧｏＴｏｏｌｓ”、[online]、インターネット＜ＵＲＬ：http://lie.math.brocku.ca/gotools/＞
【非特許文献３】”詰碁「鈍」”、[online]、インターネット＜ＵＲＬ：http://hp.vector.co.jp/authors/VA024708/＞
【非特許文献４】日本コンピュータ囲碁協会、”詰碁プログラム”、[online]、インターネット＜ＵＲＬ：http://www.geocities.jp/otto4yoshi/jcga/indexkp.html＞
【発明の概要】
【発明が解決しようとする課題】
【０００８】
特許文献１に記載のシステムでは石の死活に係る処理を行っているものの、それは、対局者が死んでいる石を指定する際に、一つの石を指定することで、当該石に隣接する一群の石も死んでいることを指定することが出来るシステムである。従って、対局者は一つの石を指定するだけで、その周辺の石を指定することなく、一群の石を死んでいる石として指定することが出来るので、対局者が死んでいる石を指定するプロセスを減らすことは出来る。しかし、石の死活そのものは対局者が判断しなくてはならず、また死活を自動的に判定できるシステムではない。
【０００９】
また特許文献２に記載のシステムでは、碁盤に置かれている石やその特徴を管理することが出来る。例えば碁盤に置かれている石同士のつながりや一群を構成する石などを管理することが出来る。従って、碁盤の石やその並びの管理などを行うとともに、非常に単純なパターン（たとえば２眼あれば活き）の石の活きの判定を行うことは出来る。しかし、非常に単純なパターンの判定しか行えず、実際の対局での使用に耐えうるものではない。
【００１０】
特許文献３に記載のシステムでは、対局の途中で、盤面上にすでに置かれている石が囲碁的に強いか弱いかを判定することは出来る。囲碁的に石が強い、弱いとは、ある石の外側が囲われていればその石は弱く、外側が囲われていなければその石は強いことを意味する。このシステムの場合、ある石の周囲（ここでは４目以内）に置かれている異なる色の石の数によって、当該石の強弱を判定している。しかし、石が囲碁的に強いか弱いかを判定できるだけであり、石の死活判定そのものが行われるわけではない。
【００１１】
さらに特許文献４に記載のシステムは、囲碁の終局時に石の死活判定を自動的に行うシステムである。このシステムは終局時、すなわち陣地（閉領域）がすでに出来ていることが前提となり、そのうえで簡易的に死活の判定を行っているに過ぎない。従って、終局していない状態、すなわち対局中に死活の判定を行うことは出来ないし、また終局時であっても、限られたパターンの死活の判定しか行うことは出来ない。
【００１２】
以上のように、上述の各特許文献に記載の死活に係る処理では、かならずしも優れた死活判定を行うことが出来ない。
【００１３】
また上述の各特許文献に記載の死活判定を行うシステムのほかにも、非特許文献に記載のように、コンピュータ上で石の死活判定を行うシステムがある。例えば、問題図と正解図、想定される失敗図を何パターンも事前に記憶させておき、それらとマッチングさせながら判定を行う方法である。
【００１４】
この場合、想定されていない着手が行われた場合には判定を行うことが出来ないし、そもそも問題図と正解図、想定される失敗図のパターンを何パターンも記憶させておくことは、記憶量の問題からあまり好ましいものではない。
【００１５】
理論的には死活判定を行うには総あたりを行えば可能である。しかし死活判定の処理には、一般的にＯ（ｎ！）の処理数が必要とされると言われている（ｎは死活判定処理を行う領域の大きさ）。そして死活判定の場合、その結果、すなわち石が活きるか死ぬかを早く知ることが所望される。しかし、総あたりの場合、上述のような処理数が必要となるので、単純に総あたりを行ったのでは、その結果を知るまでに時間がかかることも多く、対局者はストレスを感じてしまう。
【課題を解決するための手段】
【００１６】
そこで本発明者は、従来知られている死活判定システムよりも、高速に死活判定の結果を出力することが可能な囲碁の死活判定システムを発明した。
【００１７】
第１の発明は、コンピュータで囲碁の死活判定を行う、囲碁の死活判定システムであって、前記死活判定システムは、対局者による入力を受け付ける入力受付部と、目標石の死活判定を行う死活判定処理部と、前記死活判定処理部における死活判定の結果を出力する出力処理部と、を備えており、前記死活判定処理部は、前記対局者による入力に基づいて判定対象の石の設定を受け付け、さらにその判定対象のうち特定の石を目標石として設定を受け付け、前記受け付けた目標石に対する死活判定処理を実行し、前記目標石のうちの一つが取られるか、または目標石のすべてが取られないか、を判定する、囲碁の死活判定システムである。
【００１８】
従来、囲碁の死活判定システムは、判定対象の石のいずれかが取られなければ勝ち、すべてが取られれば負け、として死活の判定処理が実行されている。ところが、局面においては一つも取られてはいけない石、あるいはすべてを守らなくてはいけない石が存在する。このような場合に従来の死活判定処理システムでは対応できなかった。そこで本発明のように構成することで、目標石の設定が可能となり、目標石の基準に従った死活判定処理を行うことが可能となる。
【００１９】
本発明のプログラムをコンピュータに読み込ませて実行することで、上述の第１の発明を構成することもできる。コンピュータを、対局者による入力を受け付ける入力受付部、目標石の死活判定を行う死活判定処理部、前記死活判定処理部における死活判定の結果を出力する出力処理部、として機能させる囲碁の死活判定プログラムであって、前記死活判定処理部は、前記対局者による入力に基づいて判定対象の石の設定を受け付け、さらにその判定対象のうち特定の石を目標石として設定を受け付け、前記受け付けた目標石に対する死活判定処理を実行し、前記目標石のうちの一つが取られるか、または目標石のすべてが取られないか、を判定する、囲碁の死活判定プログラムのように構成しても良い。
【発明の効果】
【００２０】
本発明の囲碁の死活判定システムを用いることによって、対局中、終局時に限られず、また従来の死活判定システムよりも高速に死活判定の結果を出力することが出来る。
【図面の簡単な説明】
【００２１】
【図１】囲碁の対局をネットワークを介して実現する場合の構成の一例を模式的に示す図である。
【図２】本発明の全体の処理機能の一例を模式的に示す概念図である。
【図３】本発明で用いられるサーバやコンピュータ端末のハードウェア構成の一例を模式的に示す図である。
【図４】実施例１における死活判定処理の処理機能の一例を模式的に示す概念図である。
【図５】実施例１における死活判定処理の処理プロセスの一例を模式的に示すフローチャートである。
【図６】実施例１における対局画面の一例である。
【図７】実施例１における編集画面の一例である。
【図８】実施例１における編集画面の一例である。
【図９】実施例１の盤面の状態の一例である。
【図１０】実施例１の盤面の状態の一例である。
【図１１】実施例１の盤面の状態の一例である。
【図１２】実施例１における結果の画面の一例である。
【図１３】実施例１における全体の詳細な処理プロセスの一例を模式的に示すフローチャートである。
【図１４】実施例１における処理Ａの詳細な処理プロセスの一例を模式的に示すフローチャートである。
【図１５】実施例１における処理Ｂの詳細な処理プロセスの一例を模式的に示すフローチャートである。
【図１６】実施例１における処理Ｃの詳細な処理プロセスの一例を模式的に示すフローチャートである。
【図１７】実施例１における処理Ｄの詳細な処理プロセスの一例を模式的に示すフローチャートである。
【図１８】Ｅ点を示す図である。
【図１９】複数の石の群におけるＥ点を求める処理を示す図である。
【図２０】Ｏ点を示す図である。
【図２１】複数の石の群におけるＯ点を求める処理を示す図である。
【図２２】Ｅ空点、Ｏ空点の一例を示す図である。
【図２３】実施例２における死活判定処理の処理機能の一例を模式的に示す概念図である。
【図２４】実施例２における死活判定処理の処理プロセスの一例を模式的に示すフローチャートである。
【図２５】実施例２における対局画面の一例である。
【図２６】実施例２における編集画面の一例である。
【図２７】実施例２における編集画面の一例である。
【図２８】実施例２の盤面の状態の一例である。
【図２９】実施例２の盤面の状態の一例である。
【図３０】実施例２の盤面の状態の一例である。
【図３１】実施例２の盤面の状態の一例である。
【図３２】実施例２の盤面の状態の一例である。
【図３３】実施例２の盤面の状態の一例である。
【図３４】実施例２の盤面の状態の一例である。
【図３５】実施例２の盤面の状態の一例である。
【図３６】実施例２の盤面の状態の一例である。
【図３７】実施例２における対局画面のほかの一例である。
【図３８】実施例２の盤面の状態のほかの一例である。
【図３９】実施例２の盤面の状態のほかの一例である。
【図４０】実施例２の盤面の状態のほかの一例である。
【図４１】実施例２の盤面の状態のほかの一例である。
【図４２】実施例２の盤面の状態のほかの一例である。
【図４３】実施例２の盤面の状態のほかの一例である。
【図４４】実施例２の盤面の状態のほかの一例である。
【図４５】実施例２の盤面の状態のほかの一例である。
【図４６】実施例２の盤面の状態のほかの一例である。
【図４７】実施例２における全体の詳細な処理プロセスの一例を模式的に示すフローチャートである。
【図４８】実施例２における処理Ａの詳細な処理プロセスの一例を模式的に示すフローチャートである。
【図４９】実施例２における処理Ａ２の詳細な処理プロセスの一例を模式的に示すフローチャートである。
【図５０】実施例２における処理Ａ３の詳細な処理プロセスの一例を模式的に示すフローチャートである。
【図５１】実施例２における処理Ａ４の詳細な処理プロセスの一例を模式的に示すフローチャートである。
【図５２】実施例２における処理Ｂの詳細な処理プロセスの一例を模式的に示すフローチャートである。
【図５３】実施例２における処理Ｂ２の詳細な処理プロセスの一例を模式的に示すフローチャートである。
【図５４】実施例３における死活判定処理の処理機能の一例を模式的に示す概念図である。
【図５５】実施例３における死活判定処理の処理プロセスの一例を模式的に示すフローチャートである。
【図５６】０眼への変形処理の一例を示す図である。
【図５７】後手１眼への変形処理の一例を示す図である。
【図５８】１眼への変形処理の一例を示す図である。
【図５９】実施例３における対局画面の一例である。
【図６０】実施例３における編集画面の一例である。
【図６１】実施例３における編集画面の一例である。
【図６２】実施例３の盤面の状態の一例である。
【図６３】実施例３の盤面の状態の一例である。
【図６４】実施例３の盤面の状態の一例である。
【図６５】実施例３の盤面の状態の一例である。
【図６６】実施例３の盤面の状態の一例である。
【図６７】実施例３における全体の詳細な処理プロセスの一例を模式的に示すフローチャートである。
【図６８】実施例３における処理Ｄ１の詳細な処理プロセスの一例を模式的に示すフローチャートである。
【図６９】実施例３における処理Ｄ２の詳細な処理プロセスの一例を模式的に示すフローチャートである。
【図７０】実施例３における処理Ａの詳細な処理プロセスの一例を模式的に示すフローチャートである。
【図７１】実施例３における処理Ｂ、処理Ｃ、処理Ｂ’、処理Ｃ’の詳細な処理プロセスの一例を模式的に示すフローチャートである。
【図７２】実施例４における死活判定処理の処理機能の一例を模式的に示す概念図である。
【図７３】実施例４における死活判定処理の処理プロセスの一例を模式的に示すフローチャートである。
【図７４】実施例４における対局画面の一例である。
【図７５】実施例４における編集画面の一例である。
【図７６】実施例４における編集画面の一例である。
【図７７】実施例４の盤面の状態の一例である。
【図７８】実施例４の盤面の状態の一例である。
【図７９】実施例４の盤面の状態の一例である。
【図８０】実施例４の盤面の状態の一例である。
【図８１】実施例４の盤面の状態の一例である。
【図８２】実施例４の盤面の状態の一例である。
【図８３】実施例４の盤面の状態の一例である。
【図８４】実施例４の盤面の状態の一例である。
【図８５】実施例４の盤面の状態の一例である。
【図８６】実施例４の盤面の状態の一例である。
【図８７】実施例４の盤面の状態の一例である。
【図８８】実施例４の盤面の状態の一例である。
【図８９】実施例４の盤面の状態の一例である。
【図９０】実施例４の盤面の状態の一例である。
【図９１】実施例４の盤面の状態の一例である。
【図９２】実施例４の盤面の状態の一例である。
【図９３】実施例４の盤面の状態の一例である。
【図９４】実施例４の盤面の状態の一例である。
【図９５】実施例４の盤面の状態の一例である。
【図９６】実施例４の盤面の状態の一例である。
【図９７】実施例４の盤面の状態の一例である。
【図９８】実施例４の盤面の状態の一例である。
【図９９】実施例４の盤面の状態の一例である。
【図１００】実施例４の盤面の状態の一例である。
【図１０１】実施例４の盤面の状態の一例である。
【図１０２】実施例４の盤面の状態の一例である。
【図１０３】実施例４の盤面の状態の一例である。
【図１０４】実施例４の盤面の状態の一例である。
【図１０５】実施例４における全体（処理Ａ）の詳細な処理プロセスの一例を模式的に示すフローチャートである。
【図１０６】実施例４における処理Ｂの詳細な処理プロセスの一例を模式的に示すフローチャートである。
【図１０７】実施例４における処理Ｄの詳細な処理プロセスの一例を模式的に示すフローチャートである。
【図１０８】実施例４における処理Ｃの詳細な処理プロセスの一例を模式的に示すフローチャートである。
【図１０９】実施例４における処理Ｃ２の詳細な処理プロセスの一例を模式的に示すフローチャートである。
【図１１０】実施例４における処理Ｃ３の詳細な処理プロセスの一例を模式的に示すフローチャートである。
【図１１１】実施例４における処理Ｅの詳細な処理プロセスの一例を模式的に示すフローチャートである。
【図１１２】実施例４における処理Ｆの詳細な処理プロセスの一例を模式的に示すフローチャートである。
【図１１３】実施例４における処理Ｆ２の詳細な処理プロセスの一例を模式的に示すフローチャートである。
【図１１４】実施例４における処理Ｆ３の詳細な処理プロセスの一例を模式的に示すフローチャートである。
【図１１５】実施例４における処理Ｇの詳細な処理プロセスの一例を模式的に示すフローチャートである。
【図１１６】実施例４における処理Ｈの詳細な処理プロセスの一例を模式的に示すフローチャートである。
【発明を実施するための形態】
【００２２】
本発明の囲碁の死活判定システム１（以下、単に「死活判定システム１」という）は、インターネットなどのネットワークを介した囲碁の対局システムにおいて、あるいはネットワークを介さない囲碁の対局システムにおいて、用いることが出来る。なお、本明細書では対局システムと同時に、死活判定システム１を用いる場合を説明するが、死活判定システム１単独で機能させることも可能である。その場合にも同様に処理が行える。
【００２３】
図１に、本発明の死活判定システム１を備えた、ネットワークを介した囲碁の対局システムの構成の一例を模式的に示す。この場合、各対局者が利用するコンピュータ端末（対局者端末３）と、対局システムを実現するサーバ２とがネットワークを介して情報の送受信が可能である。本明細書では、対局システムと死活判定システム１とは同一のサーバ２内で処理が実行される場合を示すが、異なるサーバ２で処理が実行されていても良い。また上述のように、サーバ２で対局システムが実現されるほか、死活判定システム１を備えた対局システムが対局者端末３に備えられることで、ネットワークを介さずに本発明に係る処理が実行されても良い。また、対局システムに本発明の死活判定システム１がその機能として組み込まれ、一体的に構成されていても良い。
【００２４】
本発明の囲碁の死活判定システム１の処理機能の一例の概念図を模式的に図２に示す。上述のように、本明細書ではネットワークを介して囲碁の対局システムが構成される場合なので、サーバ２に各処理機能が備えられ、対局者が利用する対局者端末３との間で情報の送受信をネットワークを介して行うことで、その処理が実現される。
【００２５】
またサーバ２および対局者端末３であるコンピュータ端末のハードウェア構成の一例を図３に模式的に示す。サーバ２およびコンピュータ端末は、プログラムの演算処理を実行するＣＰＵなどの演算装置１０と、情報を記憶するＲＡＭやハードディスクなどの記憶装置１１と、ディスプレイ（画面）などの表示装置１２と、キーボードやポインティングデバイス（マウスやテンキーなど）などの入力装置１３と、演算装置１０の処理結果や記憶装置１１に記憶する情報をインターネットやＬＡＮなどのネットワークを介して送受信する通信装置１４とを有している。サーバ２およびコンピュータ端末上で実現する各機能（各手段）は、その処理を実行する手段（プログラムやモジュールなど）が演算装置１０に読み込まれることでその処理が実行される。各機能は、記憶装置１１に記憶した情報をその処理において使用する場合には、該当する情報を当該記憶装置１１から読み出し、読み出した情報を適宜、演算装置１０における処理に用いる。また、コンピュータ端末、サーバ２は、複数のコンピュータ端末またはサーバ２に、その機能が分散配置されていても良い。
【００２６】
本発明における各手段は、その機能が論理的に区別されているのみであって、物理上あるいは事実上は同一の領域を為していても良い。
【００２７】
サーバ２は入力受付部２０と死活判定処理部２１と出力処理部２２とを有する。なお本明細書では図示していないが、同一または異なるサーバ２には、囲碁の対局システムを実現する処理機能が備えられており、そこでは盤面の情報（すなわち、どの目にどの石が置かれているか、手番など、囲碁の対局をコンピュータで実現するために必要な情報）を記憶・管理している。そして死活判定処理システムが死活判定処理を行う場合には、その盤面の情報などを適宜、対局システムから取得し、死活判定処理に用いる。
【００２８】
入力受付部２０は、死活判定を行うことの要求や着手の情報、手番の情報、判定対象の石、目標石などの情報などの死活判定を行うのに必要な情報を対局者端末３から受け付ける。また出力処理部２２は、死活判定処理部２１における処理結果や対局者端末３に表示させる情報などを、対局者端末３に送る。
【００２９】
死活判定処理部２１は、入力受付部２０で死活判定処理を行うことの要求を対局者端末３から受け付けると、対局システムから盤面の情報を取得し、その盤面または対局者によって編集された編集後の盤面の情報に基づいて死活判定処理を行う。またこの際に、盤面すべてについてではなく、どの領域について死活判定処理を行うかの領域を指定する情報を対局者端末３から受け付けることで、当該領域についての盤面の情報を取得し、死活判定処理を行っても良い。また、そのほか手番の情報、判定対象の石、目標石などの死活判定処理に必要な情報を対局者端末３から入力受付部２０が受け付け、それを用いて処理を実行する。
【００３０】
死活判定処理は基本的には、従来と同様に、石が置かれていない点に総あたりで石を置き、それをすべてのパターンについて逐次判定することで、石の死活判定処理を行うが、その場合、処理時間が多く必要となる。そこで死活判定処理部２１は、上記総あたり処理の前に、後述する各処理の一以上を任意に実行することで総あたり処理の高速化を実現する。なお死活判定処理部２１における死活判定処理としては、従来と同様の死活判定処理プログラムを用いることが出来る。なお以下の各実施例では、総あたりによる死活判定処理を行う場合を示すが、それ以外の従来の死活判定処理プログラムによる方法を用いることも可能である。また総あたりでの死活判定処理とは、従来の死活判定処理プログラムにおいて用いられている死活判定処理であっても良く、必ずしも判定領域内のすべての空点に対する総あたり処理を行わなくても良い。例えば判定領域内の空点のうち、一部の空点については処理を省略するなどの方法であっても良い。例えば、価値が全く同じ着手が複数あった場合、一つの着手のみを実行する、といったように処理を省略する方法などがある。すなわち、死活判定実行部２１４は、任意の方法により、判定領域内にある判定対象の石または目標石に対しての死活判定処理を実行できる方法であれば如何なる方法であっても良い。また本明細書での死活判定処理として総あたり（または一部の空点について処理を行わない効率化処理を施した総あたり）での死活判定処理の場合を示すが、総あたりでの死活判定処理でなくても、死活を判定できる方法であれば、如何なる方法を用いることも出来る。
【００３１】
なお、従来の死活判定処理プログラムの一例として、上述の各非特許文献に記載のコンピュータプログラムなどがあり、それらを適宜用いることが可能であるが、それらに限定されるものではない。
【００３２】
なお、後述の各実施例の説明で用いる用語を以下に説明する。判定対象の石とは、活きまたは死にの結論を出すべき石であり、判定領域内の一方の色の石のすべてが含まれる。少なくとも一つの石が活きる場合、死活判定の結果は活きとなり、すべての石が取られる場合、死活判定の結果は死にとなる。また目標石とは判定対象の石の一部の石またはすべての石であって、活きまたは死にの結論を出すべき石である。ただし目標石が指定された場合、目標石のすべてが活きる場合、死活判定の結果は活きとなり、目標石の少なくとも一つの石が取られる場合、死活判定の結果は死にとなる。なお目標石は対局者によって指定されても指定されなくても良い。
【００３３】
判定領域とは、判定の際、石の着手を可能とする領域である。グループとは隣接（縦横に位置する石）して連結している同色の石の集まりである。外部とは、判定の際、着手を不可能とする領域である。この領域にある石のグループは活き石として扱われ、また一つのグループが判定領域と外部の両方に含まれることはない。
【実施例１】
【００３４】
上述の死活判定処理部２１ａにおける高速処理の第１の実施例を以下に説明する。本実施例における死活判定処理部２１ａの処理機能の一例の概念図を図４に示す。本実施例の死活判定処理部２１ａでは、総あたりの死活判定処理を行うにあたり、死活判定の結果が出る可能性が高い点から優先的に総あたりを行うように、各点の処理の優先度を変更した上で、その優先度に従って、総あたりの死活判定処理を実行する場合を示す。
【００３５】
本実施例の死活判定処理部２１ａでは初期判定処理部２１０と第１判定処理部２１１と第２判定処理部２１２と優先度変更処理部２１３と死活判定実行部２１４と優先度記憶部２１５とを備える。
【００３６】
初期判定処理部２１０は、本実施例における高速判定が可能であるかを判定する。すなわち、判定領域の内部にある、本来の判定対象の石の一部または全部を外部とし、その外部より内側にある、本来の判定対象の石とは異なる色の石を内部とした判定が可能であるかを判定する。判定可能であると判定した場合、本来の判定対象の石に隣接する、異なる色の石を目標石として設定する。
【００３７】
第１判定処理部２１１は、初期判定処理部２１０で高速判定可能であると判定すると、判定領域内の判定対象の石と異なる色の石を内部、本来の判定対象の石を外部とし、本来の判定対象の石に隣接する相手方の石を目標石とした死活判定を実行する。なお、目標石として、本来の判定対象の石に隣接する相手方の石の一部、あるいは判定領域内にある相手方の石の一部または全部を目標石として死活判定を実行しても良い。
【００３８】
第２判定処理部２１２は、第１判定処理部２１１で活き（勝ち）となる点がなかった場合、判定領域内の判定対象の石と異なる色の石を内部、本来の判定対象の石を外部とし、死活判定を実行する。
【００３９】
なお第１判定処理部２１１において、本来の判定対象の石に隣接する相手方の石の全部を目標石とした死活判定を実行した結果、活き（勝ち）となる点がなかった場合に、本来の判定対象の石に隣接する相手方の石の一部、あるいは判定領域内にある相手方の石の一部または全部を目標石として死活判定をさらに実行しても良い。そしてこの死活判定処理でも活き（勝ち）となる点がなかった場合に、第２判定処理部２１２における死活判定処理を実行するように構成することも出来る。
【００４０】
優先度変更処理部２１３は、第１判定処理部２１１、第２判定処理部２１２で活きとなる点があった場合に、その点について、後述する優先度記憶部２１５に記憶する各点の優先度を上げる処理を行う。また第１判定処理部２１１で活きとなる点があった場合のその着点以外の点、第２判定処理部２１２で活きとなる点があった場合のその着点以外の点、あるいは第２判定処理部２１２で活きとなる点がなかった場合の判定領域内の点について、後述する優先度記憶部２１５に記憶する各点の優先度を下げる処理を行う。
【００４１】
死活判定実行部２１４は、第１判定処理部２１１、第２判定処理部２１２でそれぞれ設定した条件に従って、各判定領域内の空点に対する死活判定処理を実行する。この死活判定処理は従来と同様の死活判定処理プログラムを用いることが出来る。なお以下の各実施例では、総あたりによる死活判定処理を行う場合を示すが、それ以外の従来の死活判定処理プログラムによる方法を用いることも可能である。また総あたりでの死活判定処理とは、従来の死活判定処理プログラムにおいて用いられている死活判定処理であっても良く、必ずしも判定領域内のすべての空点に対する総あたり処理を行わなくても良い。例えば判定領域内の空点のうち、一部の空点については処理を省略するなどの方法であっても良い。例えば、価値が全く同じ着手が複数あった場合、一つの着手のみを実行する、といったように処理を省略する方法などがある。すなわち、死活判定実行部２１４は、任意の方法により、判定領域内にある判定対象の石または目標石に対しての死活判定処理を実行できる方法であれば如何なる方法であっても良い。
【００４２】
優先度記憶部２１５は、各点についての着手処理の優先度を記憶している。
【００４３】
次に本実施例における死活判定処理の処理プロセスの一例を図５のフローチャートを用いて説明する。
【００４４】
対局者が利用する対局者端末３同士でネットワークを介して囲碁の対局が行われている。この際に囲碁の対局は対局システムを実現するサーバ２上でその処理が行われている。そしてその対局中、あるいは終局後、対局者のいずれかがその表示される画面から所定のボタン等を押下することで、死活判定処理を行うことの要求が対局者端末３から、死活判定処理を行うサーバ２に送信される。対局画面の一例を図６に示す。
【００４５】
対局画面が図６の場合、その画面のうち、「死活ナビ」など、死活判定処理を行うことを要求するボタンを押下することで、死活判定処理を行うことの要求が対局者端末３からサーバ２に送信される。
【００４６】
サーバ２の入力受付部２０でその要求を受け付けると、死活判定処理部２１ａは、対局システムの記憶装置１１から当該盤面の情報（たとえば棋譜の情報）を取得する。そして盤面の情報が含まれた死活判定処理の画面を出力処理部２２が対局者端末３に送信する。この際の画面の一例が図７である。なお実際に対局している盤面の情報のほか、すでに対局し、所定の記憶装置１１に保存している棋譜の情報、あるいは観戦している対局の棋譜の情報を死活判定処理部２１ａが対局システムの記憶装置１１から取得し、その棋譜の情報を図７の画面に含めて対局者端末３に送信しても良い。
【００４７】
死活判定を行う対局者は、図７に示す死活判定処理を行う画面から盤面の編集を行う。例えば表示されている石を指定することで、石を取り除いたり、あるいは石を置く。またマウスなどの入力装置１３をドラッグするなどにより、判定領域を指定する。このように死活判定処理を所望する対局者は、適宜、盤面の情報を編集する。この際の編集される石の情報、手番の情報などは、対局者端末３からサーバ２に適宜、送られる。
【００４８】
上述のように対局者が判定領域を指定することにより、その判定領域内にある結論を出すべき石を判定対象の石として設定される。なお、対局者が判定対象の石のうち、さらに特定の石を結論を出すべき石（目標石）として設定したい場合には、それを目標石として設定することが出来る。判定対象の石のうち少なくとも一つの石が活きる時には死活判定の結論は活きとなり、すべての石が取られる場合、結論は死にとなる。なお、目標石を指定した場合には、目標石のすべてが活きる時には死活判定の結論は活きとなり、目標石のうち少なくとも一つが取られる場合、死活判定の結論は死にとなる。なお目標石の指定は必須ではなく、また目標石を指定するかしないかではその処理には差がなく、活き死にの判断基準が変わるだけである。従って、以下の実施例においてはその断りがない限り、対局者が目標石を指定しない場合を説明する。
【００４９】
編集後の死活判定処理を行う画面の一例を図８に示す。なお図８では判定対象の石が黒の１３子、手番は白であるとする。囲碁において「手番」とは次の順番の石の色を示すほか、手番から見た勝ち負け（活き死に）を判定することを示す。従って、この場合、次の順番は白石であり、さらに白石から見て黒の１１子の死活判定を行うことを意味している。
【００５０】
例えば図８の画面における「判定処理」を押下することで、編集後の盤面の情報（棋譜の情報と判定対象の石の情報など）と手番の情報と、死活判定処理を開始することの要求とが対局者端末３からサーバ２に送信される。サーバ２の入力受付部２０で編集後の盤面の情報と手番の情報と死活判定処理を開始することの要求を受け付けると、死活判定処理部２１ａは、入力を受け付けた編集後の盤面の情報に基づいて、死活判定処理を開始する。
【００５１】
まず死活判定処理部２１ａは、死活判定処理を開始するにあたり、各点（石の置かれていない交点、すなわち空点）の処理の優先度を任意に、仮に設定する（Ｓ１００）。ここで仮に設定された各点の優先度は、優先度記憶部２１５に記憶される。この各点の処理の優先度は、どのような方法で設定しても良い。この優先度は、どの空点から処理を実行するかを特定する優先度であって、順位付けされていても良いし、各空点ごとにポイントが付加され、そのポイントが高い順（あるいは低い順）に処理が行われるように優先度が設定されていても良い。なおこの各点の優先度の設定は、従来と同様である。
【００５２】
次に、死活判定処理部２１ａの初期判定処理部２１０は、本実施例における高速処理が実行可能かを、盤面の情報（編集後の盤面の情報）に基づいて判定する（Ｓ１１０）。すなわち、判定領域の内部にある、本来の判定対象の石を外部とし、その外部より内側にある、本来の判定対象の石とは異なる色の石を内部とした判定が可能であるかを判定する。また、この際に初期判定処理部２１０は、本来の判定対象の石に隣接している石（判定対象の石と隣接している相手方の石）をすべて目標石として特定する。
【００５３】
つまり盤面の情報は図８の状態であり、本来の判定対象の石が黒石の１３子であるので、初期判定処理部２１０は、判定領域内の白石を内部、判定対象の黒石を外部とし、目標石として星によって示される白石を特定する（この盤面の状態を模式的に示すのが図９である）。そして図８の場合、判定対象の石である黒石の内部に白石が含まれていることから、本実施例の高速判定が可能であると判定する（Ｓ１２０）。
【００５４】
なおＳ１１０の判定処理において、本来の判定対象の石の領域内に相手方の石がないなどの理由で高速判定できない場合には、本実施例による処理を中止し、従来どおり、総あたりによる死活判定処理を開始する（Ｓ１３０）。
【００５５】
また、Ｓ１１０の判定処理において、上述のように高速判定が可能であることを初期判定処理部２１０が判定すると、第１判定処理部２１１は、判定対象の石の内部を判定領域とした死活判定処理を、現在の手番（すなわちここでは白の手番）で行う。この死活判定処理は、Ｓ１１０で設定した判定領域内のみに対しての総あたりを行う（Ｓ１４０）。すなわち、図１０に示すように、白８子を判定対象の石および目標石として、手番白での判定を開始する。従って、図１０の白い四角で示されたのが判定領域内の空点であるので、この点に対して、死活判定実行部２１４が、総あたりで死活判定処理を開始する。なお総あたりの死活判定処理そのものは従来と同様である。
【００５６】
そうすると、図１０の場合、図１１に示すように、白活き（白勝ち）として判定でき、その着点が２カ所のＡ点であると第１判定処理部２１１が判定する。
【００５７】
第１判定処理部２１１で手番の石についての活き（勝ち）を判定する（活きとなる点がある）と（Ｓ１５０）、その着点について、優先度変更処理部２１３は、優先度記憶部２１５に記憶する、Ｓ１００で設定した仮の優先度から、当該点の優先度をあげ、それ以外の点（第１判定処理部２１１での判定領域におけるＡ点以外の点）の優先度を下げる（Ｓ１６０）。例えば着点として判定されたＡ点の優先順位を最上位（例えば１番と２番）に変更し、順次、順位を繰り下げるとともに、第１判定処理部２１１での判定領域におけるＡ点以外の点の優先順位を下げる。あるいはＡ点についての優先順位を所定順位（例えば１０番）だけ繰り上げ、第１判定処理部２１１での判定領域におけるＡ点以外の点の優先順位を所定順位だけ繰り下げる。さらに優先度がポイントで管理されている場合には、Ａ点について所定量のポイントを加算し、第１判定処理部２１１での判定領域におけるＡ点以外の点について所定量のポイントを減算する。なお優先度の変更処理については、上記に限られず、少なくとも着点の優先度が上がるものであれば如何なるものであっても良い。
【００５８】
このように第１判定処理部２１１で着点として判定された点の優先度を、優先度変更処理部２１３が優先度が高くなるように変更することで、当該点（着点として判定されたＡ点）は優先的に処理が行われるようになる。
【００５９】
また、Ｓ１４０での第１判定処理部２１１での判定の結果、手番の石についての活き（勝ち）が判定できない（活きとなる点がない）場合には、第２判定処理部２１２において、Ｓ１４０で指定された目標石を指定せず、Ｓ１４０と同様に、死活判定実行部２１４で総あたりでの死活判定処理を開始する（Ｓ１７０）。
【００６０】
すなわち、Ｓ１４０での第１判定処理部２１１での判定では、本来の判定対象の石に隣接している石をすべて目標石として指定しているが、第２判定処理部２１２では目標石を指定せずに、Ｓ１４０と同様に総あたりでの死活判定処理を実行する。従って、図１０の場合、Ｓ１４０では白８子を判定対象の石および目標石として手番白での判定を開始したが、Ｓ１７０では、白８子を判定対象の石として手番白での判定を開始する。この場合であっても、総あたりの対象となる空点は、Ｓ１４０とは変わらない。
【００６１】
そして第２判定処理部２１２で手番の石についての活き（勝ち）を判定する（活きとなる点がある）と（Ｓ１８０）、その着点について、優先度変更処理部２１３は、優先度記憶部２１５に記憶する、Ｓ１００で設定した仮の優先度から、当該点の優先度をあげ、それ以外の点の優先度を下げる（Ｓ１９０）。また第２判定処理部２１２で手番の石についての活き（勝ち）を判定出来ない（活きとなる点がない）場合には、優先度変更処理部２１３は、当該判定領域の各点の優先度を下げる（Ｓ２００）。
【００６２】
以上のようにすることで、判定領域の内部にある本来の判定対象の石と異なる色の石を内部、本来の判定対象の石を外部、とした場合の手番の石の活きの判定を行い、その判定結果に基づいて、活きとなる点があるならば、Ｓ１００で仮に設定した当該着点の優先度を上げ、それ以外の点については優先度を下げることが可能となる。
【００６３】
そして以上のような処理を行った後、死活判定処理部２１ａは、優先度記憶部２１５に記憶する、第１判定処理部２１１または第２判定処理部２１２で変更された、各点の優先度に従って総あたりでの死活判定処理を実行することとなる。
【００６４】
第１判定処理部２１１または第２判定処理部２１２で活きと判定された際の着点（例えば図１１のＡ点）は、総あたりに死活判定を行う場合にも、ほかの空点よりも優先して処理が行われる。この着点は、本来の判定対象の石の死活判定に影響を与える可能性が高い点（活きるあるいは死ぬと判定できる可能性の高い点）であることから、これらの着点を優先的に処理することで、本来の判定対象の石の死活の結果を早く出す可能性を高めることが出来る。
【００６５】
つまり、単純に総あたりする場合、Ｓ１００で各点ごとに仮に設定された優先度に従って総あたりを実行するため、いつ死活の結果が出るかが分からない。しかし本実施例の死活判定処理部２１ａにおける処理を行うことで、死活の結果が出る可能性が高い点から優先的に処理するので、死活の結果が早く出る可能性が高くなる。
【００６６】
また逆に、第１判定処理部２１１で活きとなる点があった場合の着点以外の点、第２判定処理部２１２で活きとなる点があった場合の着点以外の点、あるいは第２判定処理部２１２で活きとなる点がなかった場合の判定領域の各点の優先度を下げる処理を優先度変更処理部２１３は行っているので、それらの点は、仮に設定された点の処理よりもあとに処理が行われる。これらの点は、本来の判定対象の石の死活判定に影響を与える可能性が低い点（活きる或いは死ぬと判定できる可能性が低い点）であることから、優先度を下げることで、本来の判定対象の石の死活の結果を早く出す可能性を高めることが出来る。
【００６７】
以上のようにして死活判定処理部２１ａで死活判定の処理結果を判定すると、出力処理部２２は、その処理結果を対局者端末３に送信する。この際に対局者端末３で表示される死活判定の結果の画面の一例を図１２に示す。このような画面を対局者が見ることで、死活の結果を知ることが出来る。
【００６８】
次に上述の各処理のより詳細な説明を図１３乃至図１７を用いて説明する。なお以下の各実施例の説明で用いるデータ形式および用語を以下に説明する。
【００６９】
盤面データはＢｏａｒｄ［ｘ］［ｙ］とする（ただし１≦ｘ≦１９，１≦ｙ≦１９）。そして盤面の各点は空点であれば０、黒石があれば１、白石があれば２が代入される。
手番はｔｎで示される。なおｔｎ＾３で相手の石の色になるが、「＾」はビット演算を示す。
判定対象の石はＨ［ｘ］［ｙ］とする。判定対象となる石には１、目標石でもある石には２が代入される。
着手の優先順位はＯｒｄｅｒ［ｉ］とする（ただし０≦ｉ＜３６１）また、Ｏｒｄｅｒ［ｉ］．ｘ（点ｉのｘ座標）、Ｏｒｄｅｒ［ｉ］．ｙ（点ｉのｙ座標）は座標である。またＯｒｄｅｒ［ｉ］．ｖは変数（点ｉの着手の優先順位）である。
判定領域はＡｒｅａ［ｘ］［ｙ］とする（ただし１≦ｘ≦１９，１≦ｙ≦１９）。判定領域である点には１が代入され、判定領域外の点には０が代入される。
グループ化とは、ある点から同じ色で、縦または横に隣接している点の集合を配列に代入する処理である。
【００７０】
Ｅ点とは、その石から縦路または横路に隣接している（距離が１だけ離れた）点の集合である。図１８に示すように、黒１子に対するＥと書かれている点がＥ点となる。また、複数の石の群におけるＥ点は、その石群を構成するすべての石のＥ点の和集合から、その石群が存在する点を除いたものとなる。これを示す一例が図１９である。
【００７１】
Ｏ点とは、その石から斜めに隣接している（距離が１だけ離れた）点の集合である。図２０に示すように、黒１子に対するＯと書かれている点がＯ点となる。また、複数の石の群におけるＯ点は、その石群を構成するすべての石のＯ点の和集合から、その石群が存在する点とその石群のＥ点に含まれる点を除いたものとなる。これを示す一例が図２１である。
【００７２】
Ｅ空点とは、その石群のＥ点のうち、いずれの石も置かれていない点の集合である。Ｏ空点とは、その石群のＯ点のうち、いずれの石も置かれていない点の集合である。これらの一例を示すのが図２２である。
【００７３】
まず死活判定処理部２１ａは、盤面の情報を読み込み、Ｂｏａｒｄ［ｘ］［ｙ］に空点であるか、黒石が置かれているか、白石が置かれているかを記憶していく。また判定領域Ａｒｅａ［ｘ］［ｙ］にそれぞれ判定領域であるか否かを記憶していく。また上記のほか、判定対象の石Ｈ［ｘ］［ｙ］、判定領域Ａｒｅａ［ｘ］［ｙ］、手番ｔｎなども適宜、設定される。そして、総あたり処理を開始するにあたり、空点（Ｂｏａｒｄ［ｘ］［ｙ］＝０）の点の処理の優先度を任意に、仮に設定する（Ｓ３００）。すなわちＯｒｄｅｒ［ｉ］にそれぞれ優先度を仮に設定していく。ここで設定した各点の優先度は優先度記憶部２１５に記憶される。なお優先度の処理については上述と同様に如何なる方法でも良い。
【００７４】
次に、死活判定処理部２１ａの初期判定処理部２１０は、初期判定処理（処理Ａ）を実行する（Ｓ３１０）。
【００７５】
具体的には、まず配列Ａｒｅａ［ｘ］［ｙ］＝１、Ｂｏａｒｄ［ｘ］［ｙ］＝ｔｎ＾３となる各点のｘ，ｙについて、Ｓ３１００乃至Ｓ３１２０の処理を反復する。すなわち、Ｂｏａｒｄ［ｘ］［ｙ］を判定対象として判定領域を生成し（Ｓ３１００）、Ｓ３１００で設定した判定領域で、外部となる石がすべて、本来の判定の判定対象の石に含まれるかを判定する（Ｓ３１１０）。もし含まれない場合には、次の点（ｘ，ｙ）の処理に移る。もし含まれる場合には、Ｓ３１００で設定した領域で判定可能であるかを判定し（Ｓ３１２０）、そうでないならば、次の点（ｘ，ｙ）の処理に移る。また判定可能ならばその時点でループを中断し、第１判定処理部２１１における処理に移る。また処理Ｂに移ることがなかった場合でループを終了した場合には、実施例１における高速判定処理を適用することが出来ないので、Ｓ３００で設定した仮の優先度（Ｏｒｄｅｒ［ｉ］に設定された優先度）に基づいて、総あたりでの死活判定処理を開始させる。
【００７６】
以上のように初期判定処理部２１０において初期判定処理（処理Ａ）を実行したあと、第１判定処理部２１１における第１判定処理（処理Ｂ）を実行する（Ｓ３２０）。なお、本来の判定領域が配列Ａｒｅａ［ｘ］［ｙ］、判定対象の石が配列Ｈ［ｘ］［ｙ］で示され、さらに、内部についての判定領域が配列Ａｒｅａ’［ｘ］［ｙ］、判定対象の石が配列Ｈ’［ｘ］［ｙ］で示される。従って、それぞれの配列Ａｒｅａ’［ｘ］［ｙ］、Ｈ’［ｘ］［ｙ］にはそれぞれ値が代入されている。
【００７７】
具体的には、まず判定対象の領域について、Ｈ’［ｘ］［ｙ］＝１となる各点（判定対象となる各点）（ｘ，ｙ）について、Ｓ３２００乃至Ｓ３２３０の処理を反復させる。まず、上記点（ｘ，ｙ）（Ｈ’［ｘ］［ｙ］＝１となる点）でグループ化（各点（ｘ，ｙ）から、同じ色で縦路または横路につながっている点の集合を配列に代入する）して、それを配列Ｇ［ｘ］［ｙ］に代入する（Ｓ３２００）。そして配列Ｇ［ｘ］［ｙ］のＥ点を求め、配列Ｅ［ｘ］［ｙ］に代入する（Ｓ３２１０）。
【００７８】
そして配列Ｅ［ａ］［ｂ］＝１、Ａｒｅａ’［ａ］［ｂ］＝０となる点（ａ，ｂ）があるかを判定する（１≦ａ，ｂ≦１９）（Ｓ３２２０）。すなわちＥ点であって、判定領域外の点があるかを判定する。もしないならば、その時点で処理Ｂを中止する。
【００７９】
Ｓ３２２０で上記点があるならば、Ｇ［ｃ］［ｄ］＝１となる点（ｃ，ｄ）で、Ｈ’［ｃ］［ｄ］＝２とする（１≦ｃ，ｄ≦１９）（Ｓ３２３０）。すなわちその点の石を目標石として設定する。
【００８０】
以上の処理をＨ’［ｘ］［ｙ］＝１となる各点について行った後、総あたりの死活判定処理を死活判定実行部２１４が、判定領域Ａｒｅａ’［ｘ］［ｙ］の各点について行い、活き（勝ち）となる着手点を配列Ｒ［ｘ］［ｙ］に代入する（Ｓ３２４０）。もし活き（勝ち）となる着手点がない場合には配列Ｒ［ｘ］［ｙ］には代入を行わない。なお着手点には、Ｒ［ｘ］［ｙ］に１が代入され、そうでない点には０が代入される。
【００８１】
以上のように第１判定処理部２１１において第１判定処理（処理Ｂ）を実行したあと、処理Ｂで活きとなる着手点があるかを判定する（Ｓ３３０）。もし活きとなる着手点がある場合（配列Ｒ［ｘ］［ｙ］に着手点の代入がある場合）には、後述する優先度変更処理部２１３における処理Ｄを実行する（Ｓ３５０）。
【００８２】
以上のような処理を実行することで、図５におけるＳ１１０乃至Ｓ１５０に相当する処理を実行させることが出来る。
【００８３】
またＳ３３０において、活きとなる着手点がない場合（配列Ｒ［ｘ］［ｙ］に着手点の代入がない場合）には、第２判定処理部２１２における第２判定処理（処理Ｃ）を実行する（Ｓ３４０）。
【００８４】
具体的には、まず判定対象の領域について、Ｈ’［ｘ］［ｙ］＝２となる各点（目標石となる点）（ｘ，ｙ）について、Ｈ’［ｘ］［ｙ］＝１として設定する（Ｓ３４００）。すなわち目標石となる点を判定対象となる石として設定する。
【００８５】
そして、総あたりの死活判定処理を死活判定実行部２１４が、判定領域Ａｒｅａ’［ｘ］［ｙ］の各点について行い、活き（勝ち）となる着手点を配列Ｒ［ｘ］［ｙ］に代入する（Ｓ３４１０）。もし活き（勝ち）となる着手点がない場合には配列Ｒ［ｘ］［ｙ］には代入を行わない。
【００８６】
以上のように第２判定処理部２１２における第２判定処理（処理Ｃ）を実行することで、図５におけるＳ１７０乃至Ｓ１８０に相当する処理を実行することが出来る。また、第２判定処理部２１２における第２判定処理を実行したあと、あるいはＳ３３０において処理Ｂで活きとなる点があったと判定した場合、優先度変更処理部２１３における優先度変更処理（処理Ｄ）を実行する（Ｓ３５０）。
【００８７】
まず、着手の優先度を示す配列Ｏｒｄｅｒ［ｉ］（０≦ｉ＜３６１）において、Ｏｒｄｅｒ［ｉ］．ｖ（パラメータである）の最大値をｍに代入する（Ｓ３５００）。
【００８８】
そしてｉ＝０からｉ＜３６１になるまで、Ｓ３５１０乃至Ｓ３５４０の処理を反復させる。
【００８９】
まずＨ’［Ｏｒｄｅｒ［ｉ］．ｘ］［Ｏｒｄｅｒ［ｉ］．ｙ］が１以上となる場合には（Ｓ３５１０）、そのｘ，ｙにおいて、着手点であるか、すなわちＲ［Ｏｒｄｅｒ［ｉ］．ｘ］［Ｏｒｄｅｒ［ｉ］．ｙ］＝１であるかを判定する（Ｓ３５２０）。もし着手点である場合（Ｒ［Ｏｒｄｅｒ［ｉ］．ｘ］［Ｏｒｄｅｒ［ｉ］．ｙ］＝１である場合）には、Ｏｒｄｅｒ［ｉ］．ｖをｍ＋１だけ増加させる（Ｓ３５３０）。また、着手点ではない場合（Ｒ［Ｏｒｄｅｒ［ｉ］．ｘ］［Ｏｒｄｅｒ［ｉ］．ｙ］＝１ではない場合）には、Ｏｒｄｅｒ［ｉ］．ｖをｍ＋１だけ減少させる（Ｓ３５４０）。すなわち、着手点である場合には、所定量（ｍ＋１）だけ優先度を増加させ、着手点ではない場合には、所定量（ｍ＋１）だけ優先度を減少させる。
【００９０】
以上の処理をすべてのｉについて実行したあと、Ｏｒｄｅｒ［ｉ］を、その要素ｖが大きい順にソート（並べ替え）する（Ｓ３５５０）。これによって、着手点の優先度が高くなり、そうではない点についての優先度が低くなる。
【００９１】
このようにして優先度変更処理部２１３での処理が行われると、配列Ｏｒｄｅｒ［ｉ］が優先度記憶部２１５に記憶される。以上の処理を実行することで、図５におけるＳ１６０、Ｓ１９０乃至Ｓ２００に相当する処理を実行することが出来る。そしてここで記憶された優先度に基づいて、死活判定実行部２１４が総あたりの死活判定処理を行うことによって、優先度が高い、すなわち着手点である点を優先的に処理することとなる。着手点である点は死活判定の結果が出やすい点であるので、死活判定の結果の出力を迅速に行うことが出来る。
【００９２】
死活判定実行部２１４で総あたりの判定処理を実行中に、その死活判定の結果が出た場合には、出力処理部２２がその処理結果を対局者端末３に送信する。このような画面を対局者が見ることで、死活の結果を知ることが出来る。
【００９３】
本実施例のように、単純に総あたりの死活判定処理を行う前に、判定領域の内部の相手方の石が活きているかどうかを判定し、その死活の判定結果をもとに、総あたりの際の着手の優先度を定めることで、判定対象となる石の死活判定処理を高速に実現することが出来る。
【実施例２】
【００９４】
次に、死活判定処理部２１ｂにおける高速処理の第２の実施例を以下に説明する。本実施例における死活判定処理部２１ｂの処理機能の一例の概念図を図２３に示す。本実施例の死活判定処理部２１ｂでは、総あたりの死活判定処理を行うにあたり、処理対象となる点を減らした上で、総あたりの死活判定処理を実行する場合を示す。
【００９５】
本実施例の死活判定処理部２１ｂには、第１外部処理部２１６と第２外部処理部２１７と死活判定実行部２１８とを備える。
【００９６】
第１外部処理部２１６は、本来の判定領域のうち、判定対象の石を含む閉領域を抽出し、その閉領域の外側の点であって所定条件を充足する点に、判定対象の石と異なる色の石を配置し、新たに配置した石を外部とみなすことで、総あたりの処理対象となる点を減らす。
【００９７】
第２外部処理部２１７は、外部のＥ空点であって判定領域となる点を抽出し、その各点のＥ点に外部の石が２以上含まれ、判定対象の石が一つも含まれていない点に、判定対象の石と異なる色の石を配置し、新たに配置した石を外部とみなすことで、総あたりの処理対象となる点を減らす。
【００９８】
なお本明細書において、外部とは、判定領域以外の一部または全部の領域にある点である。好ましくは、判定領域以外の点であって、かつ、Ｅ点またはＯ点が判定領域に含まれる点である。
【００９９】
死活判定実行部２１８は、第１外部処理部２１６、第２外部処理部２１７で処理がされたあとの盤面の状態において、本来の判定領域の空点に対する死活判定処理を実行する。この死活判定処理は従来と同様の死活判定処理プログラムを用いることが出来る。なお以下の実施例では、総あたりによる死活判定処理を行う場合を示すが、それ以外の従来の死活判定処理プログラムによる方法を用いることも可能である。また総あたりでの死活判定処理とは、従来の死活判定処理プログラムにおいて用いられている死活判定処理であっても良く、必ずしも判定領域内のすべての空点に対する総あたり処理を行わなくても良い。例えば判定領域内の空点のうち、一部の空点については処理を省略するなどの方法であっても良い。例えば、価値が全く同じ着手が複数あった場合、一つの着手のみを実行する、といったように処理を省略する方法などがある。すなわち、死活判定実行部２１８は、任意の方法により、判定領域内にある判定対象の石または目標石に対しての死活判定処理を実行できる方法であれば如何なる方法であっても良い。
【０１００】
なお第１外部処理部２１６および第２外部処理部２１７については双方の処理を実行しても良いし、いずれか一つであっても良い。また第１外部処理部２１６および第２外部処理部２１７における処理はその一例であって、それ以外の方法、例えば、判定対象の石と異なる色の石を外部を基準として、新たに配置することで、総あたりの処理対象となる点を減らせれば、如何なる方法であっても良い。
【０１０１】
次に本実施例における死活判定処理の処理プロセスの一例を図２４のフローチャートを用いて説明する。
【０１０２】
対局者が利用する対局者端末３同士でネットワークを介して囲碁の対局が行われている。この際に囲碁の対局は対局システムを実現するサーバ２上でその処理が行われている。そしてその対局中、あるいは終局後、対局者のいずれかがその表示される画面から所定のボタン等を押下することで、死活判定処理を行うことの要求が対局者端末３から、死活判定処理を行うサーバ２に送信される。対局画面の一例を図２５に示す。
【０１０３】
対局画面が図２５の場合、その画面のうち、「死活ナビ」など、死活判定処理を行うことを要求するボタンを押下することで、死活判定処理を行うことの要求が対局者端末３からサーバ２に送信される。
【０１０４】
サーバ２の入力受付部２０でその要求を受け付けると、死活判定処理部２１ｂは、対局システムの記憶装置１１から当該盤面の情報（たとえば棋譜の情報）を取得する。そして盤面の情報が含まれた死活判定処理の画面を出力処理部２２が対局者端末３に送信する。この際の画面の一例が図２６である。なお実際に対局している盤面の情報のほか、すでに対局し、所定の記憶装置１１に保存している棋譜の情報、あるいは観戦している対局の棋譜の情報を死活判定処理部２１ｂが対局システムの記憶装置１１から取得し、その棋譜の情報を図２６の画面に含めて対局者端末３に送信しても良い。
【０１０５】
死活判定を行う対局者は、図２６に示す死活判定処理を行う画面から盤面の編集を行う。例えば表示されている石を指定することで、石を取り除いたり、あるいは石を置く。またマウスなどの入力装置１３をドラッグするなどにより、判定領域を指定する。このように死活判定処理を所望する対局者は、適宜、盤面の情報を編集する。この際の編集される石の情報、手番の情報などは、対局者端末３からサーバ２に適宜、送られる。
【０１０６】
上述のように対局者が判定領域を指定することにより、その判定領域内にある結論を出すべき石を判定対象の石として設定される。なお、対局者が判定対象の石のうち、さらに特定の石を結論を出すべき石（目標石）として設定したい場合には、それを目標石として設定することが出来る。判定対象の石のうち少なくとも一つの石が活きる時には死活判定の結論は活きとなり、すべての石が取られる場合、結論は死にとなる。なお、目標石を指定した場合には、目標石のすべてが活きる時には死活判定の結論は活きとなり、目標石のうち少なくとも一つが取られる場合、死活判定の結論は死にとなる。なお目標石の指定は必須ではなく、また目標石を指定するかしないかではその処理には差がなく、活き死にの判断基準が変わるだけである。従って、以下の実施例においてはその断りがない限り、対局者が目標石を指定しない場合を説明するが、目標石を指定した場合には、「判定対象の石」との記載を「目標石」と適宜読み替えることで、その処理が可能となる。
【０１０７】
編集後の死活判定処理を行う画面の一例を図２７に示す。なお図２７では判定対象の石が黒の８子、手番は黒であるとする。従って、この場合、次の順番は黒石であり、さらに黒石から見て黒の８子の死活判定を行うことを意味している。
【０１０８】
例えば図２７の画面における「判定処理」を押下することで、編集後の盤面の情報（棋譜の情報と判定対象の石の情報など）と手番の情報と、死活判定処理を開始することの要求とが対局者端末３からサーバ２に送信される。サーバ２の入力受付部２０で編集後の盤面の情報と手番の情報と死活判定処理を開始することの要求を受け付けると、死活判定処理部２１ｂは、入力を受け付けた編集後の盤面の情報に基づいて、死活判定処理を開始する。
【０１０９】
まず死活判定処理部２１ｂの第１外部処理部２１６は、総あたり処理を開始するにあたり、盤面の棋譜の情報を抽出し、判定対象の石を含む閉領域を構成する石の群を抽出する（Ｓ４００）。なお閉領域とは、相手の石を無視して自分の石のみまたは自分の石と外部とで閉じている領域である。
【０１１０】
そうすると、図２７の場合、図２８に示すように、二つの閉領域を構成する石の群が抽出できる。図２８（ａ）は判定対象となる黒石のみによる閉領域であり、図２８（ｂ）は判定対象となる黒石と盤端とによる閉領域である。
【０１１１】
そしてＳ４００において閉領域がない場合（Ｓ４１０）、第１外部処理部２１６は、その処理を中止し、第２外部処理部２１７における処理を実行する。すなわち、Ｓ４７０に移る。一方、閉領域がある場合（Ｓ４１０）、各閉領域について、閉領域の外部の点であって、閉領域を構成する石の群のＥ空点以外で且つ１線のＯ空点以外の点を抽出する（Ｓ４２０）。Ｓ４２０の処理を図２８に対して実行したのが図２９である。図２９において黒四角形で示される点がＳ４２０で抽出した点である。
【０１１２】
Ｓ４２０の処理を、Ｓ４００で抽出した各閉領域について処理を実行し（Ｓ４３０）、すべての閉領域についてＳ４２０における点を抽出すると、それらのすべての閉領域で共通する点を抽出する（Ｓ４４０）。つまり各閉領域についてＳ４２０で抽出した点の積となる点を抽出する。これを模式的に示すのが図３０である。
【０１１３】
そしてＳ４４０で抽出した点のうち、判定対象の石とそのＥ空点を除く、残った点に判定対象の石と異なる色の石（ここでは白石）を配置する（Ｓ４５０）。これを模式的に示すのが図３１である。なお図３１では新たに配置された相手側の石を星印で示している。なおここでは残った点のすべてに相手側の石を配置したが、すべてではなく一部に配置をしても良い。
【０１１４】
Ｓ４５０で新たに配置した相手側の石のうち、外部に繋がっていない石を取り除く。そして取り除いた石以外の新たに配置した相手側の石を外部としてみなす（Ｓ４６０）。これを模式的に示すのが図３２および図３３である。
【０１１５】
以上のようにして第１外部処理部２１６は処理を実行する。そして第１外部処理部２１６における処理が終了後、または第１外部処理部２１６のＳ４００で閉領域がないと判定した場合、第２外部処理部２１７の処理を実行する。
【０１１６】
すなわち、第２外部処理部２１７は、判定領域内にある外部のＥ空点となる点を抽出する（Ｓ４７０）。これを模式的に示すのが図３４である。図３４において黒四角形で示される点がＳ４７０で抽出した点である。
【０１１７】
そしてＳ４７０で抽出した各点のＥ点に、外部の石が２以上含まれ、判定対象の石が１つも含まれていない点があるかを判定する。そしてある場合には、その点に判定対象となる相手側の石（白石）を配置し、外部としてみなす（Ｓ４８０）。これを模式的に示すのが図３５である。
【０１１８】
そしてＳ４８０において一つ以上の石を配置した場合には、再度、Ｓ４７０乃至Ｓ４８０の処理を実行する（Ｓ４９０）。もし石を配置しなかった場合には、その時点で第２外部処理部２１７の処理を終了する（Ｓ４９０）。図３５の場合、Ｓ４８０の条件を充足しないので、新たに石は配置されない。
【０１１９】
以上のようにして第２外部処理部２１７における処理が終了後、死活判定実行部２１８がＳ４９０の処理終了後の盤面の情報に対して、総あたり処理を実行する。上述の例の場合、図３６の各点に対して総あたりの死活判定処理を死活判定実行部２１８が実行することとなる（Ｓ５００）。
【０１２０】
そしてこの盤面の情報で死活判定処理の結果、活き（勝ち）となる点が１点以上存在している場合には（Ｓ５１０）、死活判定処理として活き（勝ち）として最終結果を判定する（Ｓ５２０）。
【０１２１】
一方、Ｓ５００の死活判定処理の結果、活き（勝ち）となる点が１点も存在しない場合には（Ｓ５１０）、盤面の情報を初期状態（図２７の状態）に戻し、死活判定実行部２１８が通常どおりの死活判定処理を実行し、その結果を最終結果として判定する。
【０１２２】
以上のようにして死活判定処理部２１ｂで死活判定の処理結果を判定すると、出力処理部２２は、その処理結果を対局者端末３に送信する。
【０１２３】
本実施例のような処理を実行したあとで死活判定実行部２１８が死活判定処理の総あたり処理を実行することで、判定領域内の総あたりの対象となる点を減らすことが出来る。従って、総あたり処理にかかる時間を減らすことが出来るので、処理結果を早く算出することが出来る。
【０１２４】
上述では編集後の盤面の情報が図２７の状態に対する処理を説明したが、次に編集後の盤面の情報が図３７であったとする。この場合の実施例２の処理プロセスを以下に説明する。
【０１２５】
例えば図３７の画面における「判定処理」を押下することで、編集後の盤面の情報（棋譜の情報と判定対象の石の情報など）と手番の情報と、死活判定処理を開始することの要求とが対局者端末３からサーバ２に送信される。サーバ２の入力受付部２０で編集後の盤面の情報と手番の情報と死活判定処理を開始することの要求を受け付けると、死活判定処理部２１ｂは、入力を受け付けた編集後の盤面の情報に基づいて、死活判定処理を開始する。
【０１２６】
まず死活判定処理部２１ｂの第１外部処理部２１６は、総あたり処理を開始するにあたり、盤面の棋譜の情報を抽出し、判定対象の石を含む閉領域を構成する石の群を抽出する（Ｓ４００）。
【０１２７】
そうすると、図３７の場合、閉領域を構成する石の群が抽出できない。そのため、第１外部処理部２１６はその処理を中止し、第２外部処理部２１７における処理を実行する（Ｓ４１０）。
【０１２８】
そして第２外部処理部２１７は、外部のＥ空点であって、判定領域となる点を抽出する（Ｓ４７０）。これを模式的に示すのが図３８である。図３８において黒四角形で示される点がＳ４７０で抽出した点である。
【０１２９】
そしてＳ４７０で抽出した各点のＥ点に、外部の石が２以上含まれ、判定対象の石が１つも含まれていない点があるかを判定する。そしてある場合には、その点に判定対象となる相手側の石（白石）を配置し、外部としてみなす（Ｓ４８０）。これを模式的に示すのが図３９である。そしてＳ４８０の処理を実行すると、新たに相手側の石が図４０のように配置される。なお図４０では新たに配置される相手側の石を星で示している。なおここでは判定したすべての点に相手側の石を配置したが、すべてではなく、一部の点だけであっても良い。
【０１３０】
Ｓ４８０で新たに相手側の石を配置したので（Ｓ４９０）、第２外部処理部２１７は、外部のＥ空点であって、判定領域となる点を抽出する（Ｓ４７０）（なお本実施例では新たに相手側の石を配置した場合に反復処理を実行するようにしたが、反復処理を実行せずとも良い）。これを模式的に示すのが図４１である。図４１において黒四角形で示される点がＳ４７０で抽出した点である。
【０１３１】
そしてＳ４７０で抽出した各点のＥ点に、外部の石が２以上含まれ、判定対象の石が１つも含まれていない点があるかを判定する。そしてある場合には、その点に判定対象となる相手側の石（白石）を配置し、外部としてみなす（Ｓ４８０）。これを模式的に示すのが図４２である。そしてＳ４８０の処理を実行すると、新たに相手側の石が図４３のように配置される。なお図４３では新たに配置される相手側の石を星で示している。
【０１３２】
Ｓ４８０で新たに相手側の石を配置したので（Ｓ４９０）、第２外部処理部２１７は、外部のＥ空点であって、判定領域となる点を抽出する（Ｓ４７０）。これを模式的に示すのが図４４である。図４４において黒四角形で示される点がＳ４７０で抽出した点である。
【０１３３】
そしてＳ４７０で抽出した各点のＥ点に、外部の石が２以上含まれ、判定対象の石が１つも含まれていない点があるかを判定する。そしてある場合には、その点に判定対象となる相手側の石（白石）を配置し、外部としてみなす（Ｓ４８０）。これを模式的に示すのが図４５である。
【０１３４】
図４５の状態では新たに石を配置することがない。そのため、第２外部処理部２１７の処理を終了する（Ｓ４９０）。
【０１３５】
以上のようにして第２外部処理部２１７における処理が終了後、死活判定実行部２１８がＳ４９０の処理終了後の盤面の情報に対して、総あたり処理を実行する。上述の例の場合、図４６の各点に対して総あたりの死活判定処理を死活判定実行部２１８が実行することとなる（Ｓ５００）。
【０１３６】
そしてこの盤面の情報で死活判定処理の結果、活き（勝ち）となる点が１点以上存在している場合には（Ｓ５１０）、死活判定処理として活き（勝ち）として最終結果を判定する（Ｓ５２０）。
【０１３７】
一方、Ｓ５００の死活判定処理の結果、活き（勝ち）となる点が１点も存在しない場合には（Ｓ５１０）、盤面の情報を初期状態（図２７の状態）に戻し、死活判定実行部２１８が通常どおりの死活判定処理を実行し（Ｓ５３０）、その結果を最終結果として判定する。
【０１３８】
以上のようにして死活判定処理部２１ｂで死活判定の処理結果を判定すると、出力処理部２２は、その処理結果を対局者端末３に送信する。
【０１３９】
次に上述の各処理のより詳細な説明を図４７乃至図５３を用いて説明する。
【０１４０】
まず死活判定処理部２１ｂは、盤面の情報を読み込み、Ｂｏａｒｄ［ｘ］［ｙ］に空点であるか、黒石が置かれているか、白石が置かれているかを記憶していく。また判定領域Ａｒｅａ［ｘ］［ｙ］にそれぞれ判定領域であるか否かを記憶していく。また上記のほか、判定対象の石Ｈ［ｘ］［ｙ］、判定領域Ａｒｅａ［ｘ］［ｙ］、手番ｔｎなども適宜、設定される。そして、死活判定処理部２１ｂにおける第１外部処理部２１６がそこにおける処理（処理Ａ）を実行する（Ｓ６００）。
【０１４１】
すなわち、まずすべての点（ｘ，ｙ）についてＲ［ｘ］［ｙ］＝Ａｒｅａ［ｘ］［ｙ］、Ｑ［ｘ］［ｙ］＝Ａｒｅａ［ｘ］［ｙ］を代入する（Ｓ６０００）。そして初期値として変数ｆにｆ＝０を代入する（Ｓ６０１０）。
【０１４２】
次に第１外部処理部２１６は、Ａｒｅａ［ｘ］［ｙ］＝１、Ｂｏａｒｄ［ｘ］［ｙ］＝０となる点（ｘ，ｙ）について、Ｓ６０２０乃至Ｓ６０８０の処理を反復する。
【０１４３】
まずＱ［ｘ］［ｙ］＝１であるかを判定し（判定領域であるかを判定し）（Ｓ６０２０）、そうでなければ、次の変数ｘ，ｙの処理に移る。一方、Ｑ［ｘ］［ｙ］＝１であるならば（判定領域であるならば）、当該点（ｘ，ｙ）を含む閉領域を抽出し、それを配列Ｃ[ｘ］［ｙ］に代入する（Ｓ６０３０）。そしてＱ［ｘ］［ｙ］＝０を代入する（Ｓ６０４０）。
【０１４４】
Ｃ［ｘ］［ｙ］＝１でないならば（Ｓ６０５０）、次の変数ｘ，ｙの処理に移る。一方、Ｃ［ｘ］［ｙ］＝１であるならば、Ｃ［ａ］［ｂ］＞０である点すべてについて（１≦ａ，ｂ≦１９）、Ｑ［ａ］［ｂ］＝０を代入する（Ｓ６０６０）。そして後述する処理Ａ２を実行する（Ｓ６０７０）。なおこの処理は、図２４におけるＳ４２０に相当する処理である。
【０１４５】
そして第１外部処理部２１６は、処理Ａ２を実行する。すなわち、配列Ｃ［ｘ］［ｙ］のＥ点を抽出し、それを配列Ｅ［ｘ］［ｙ］に代入する（Ｓ６０７３）。また配列Ｃ［ｘ］［ｙ］のＯ点で１線の点を抽出し、それを配列Ｏ［ｘ］［ｙ］に代入する（Ｓ６０７５）。その後、配列Ｃ［ｃ］［ｄ］≧１、配列Ｅ［ｃ］［ｄ］≧１、または配列Ｏ［ｃ］［ｄ］≧１のときには、Ｒ［ｃ］［ｄ］＝０を代入する（１≦ｃ，ｄ≦１９）（Ｓ６０７７）。
【０１４６】
以上のようにして第１外部処理部２１６が処理Ａ２を実行すると、変数ｆについて、ｆ＝１を代入する（Ｓ６０８０）。以上の処理を第１外部処理部２１６は、Ａｒｅａ［ｘ］［ｙ］＝１、Ｂｏａｒｄ［ｘ］［ｙ］＝０となるすべての点（ｘ，ｙ)について反復処理を実行する。
【０１４７】
以上のような処理を実行することで、図２４におけるＳ４００乃至Ｓ４４０に相当する処理を実行することが出来る。
【０１４８】
上記反復処理が終了後、変数ｆについてｆ＝１であるかを判定し（Ｓ６０９０）、ｆ＝１であれば、処理Ａ３を実行する。もしｆ＝１でなければ処理Ａを中止し、次の処理、すなわち第２外部処理部２１７での処理Ｂを実行する（Ｓ６１０）。
【０１４９】
上述のＳ６０９０において、ｆ＝１であるならば、続いて第１外部処理部２１６は、処理Ａ３を実行する。
【０１５０】
すなわち、まず配列Ｈ［ｘ］［ｙ］≧１のすべての点（ｘ，ｙ）について、Ｒ［ｘ］［ｙ］＝０を代入する（Ｓ６１００）。次に配列Ｈ［ｘ］［ｙ］≧１となるＥ点を配列Ｅ２に代入する（Ｓ６１１０）。
【０１５１】
Ｅ２［ｘ］［ｙ］＝１となるすべての点（ｘ，ｙ）について、配列Ｒ［ｘ］［ｙ］＝０を代入する（Ｓ６１２０）。そしてすべての点（ｘ，ｙ）で配列Ｗ［ｘ］［ｙ］＝０を代入する（Ｓ６１３０）。その後、Ｂｏａｒｄ［ｘ］［ｙ］＝０、Ｒ［ｘ］［ｙ］＝１となるすべての点（ｘ，ｙ）について、Ｂｏａｒｄ［ｘ］［ｙ］＝ｔｎ＾３、Ｗ［ｘ］［ｙ］＝１、Ａｒｅａ［ｘ］［ｙ］＝０を代入する（Ｓ６１４０）。
【０１５２】
以上のような処理を実行することで、図２４におけるＳ４５０に相当する処理を実行することが出来る。そしてＳ６１４０の処理終了後、第１外部処理部２１６は、処理Ａ４を実行する。
【０１５３】
まず第１外部処理部２１６は、Ｂｏａｒｄ［ｘ］［ｙ］＝ｔｎ＾３、Ａｒｅａ［ｘ］［ｙ］＝０、Ｗ［ｘ］［ｙ］＝０となるすべての点（ｘ，ｙ）をグループ化し、配列Ｇ２［ｘ］［ｙ］に代入する（Ｓ６１５０）。そしてＷ［ｘ］［ｙ］＝１となるすべての点（ｘ，ｙ）について、Ｓ６１６０乃至Ｓ６１７０の反復処理を実行する。
【０１５４】
まず配列Ｇ２［ｘ］［ｙ］＝０であるかを判定し（Ｓ６１６０）、もし０でないならば、次の点（ｘ，ｙ）の処理に移る。そして０であるならば、Ａｒｅａ［ｘ］［ｙ］＝１、Ｂｏａｒｄ［ｘ］［ｙ］＝０を代入する（Ｓ６１７０）。そして次の点（ｘ，ｙ）の処理に移る。
【０１５５】
以上の反復処理をＷ［ｘ］［ｙ］＝１となるすべての点（ｘ，ｙ）について実行することで、処理Ａ４が終了する。以上のような処理を実行することで、図２４におけるＳ４６０に相当する処理を実行することが出来る。
【０１５６】
以上の処理が終了した場合、あるいはＳ６０９０でｆ＝１でない場合、第２外部処理部２１７での処理Ｂが実行される（Ｓ６１０）。
【０１５７】
まず第２外部処理部２１７は、Ｂｏａｒｄ［ｘ］［ｙ］＝ｔｎ＾３、Ａｒｅａ［ｘ］［ｙ］＝０となる点（ｘ，ｙ）のＥ空点を配列Ｅ１［ｘ］［ｙ］に代入する（Ｓ６２００）。そして次にＡｒｅａ［ｘ］［ｙ］＝０となる点（ｘ，ｙ）について、配列Ｅ１［ｘ］［ｙ］＝０を代入する（Ｓ６２１０）。以上によって、図２４におけるＳ４７０に相当する処理を実行することが出来る。
【０１５８】
そして次に配列Ｅ１［ｘ］［ｙ］＝１となるすべての点（ｘ，ｙ）について、Ｓ６２２０乃至Ｓ６３００の反復処理を実行する。
【０１５９】
まず点（ｘ，ｙ）のＥ点を配列Ｅ２［ｘ］［ｙ］に代入し（Ｓ６２２０）、変数Ｃ＝０を代入する（Ｓ６２３０）。そして配列Ｅ２［ｘ’］［ｙ’］＝１となる点（ｘ’，ｙ’）について、Ｓ６２４０乃至Ｓ６２７０の反復処理を実行する。
【０１６０】
まず配列Ｈ［ｘ’］［ｙ’］≧１であるかを判定し（Ｓ６２４０）、そうであるならば、変数Ｃから４を減算してＣを更新する（Ｓ６２５０）。すなわちＣ＝Ｃ−４を実行する。そして、Ｈ［ｘ’］［ｙ’］≧１でない場合、あるいはＳ６２５０を実行した場合、Ａｒｅａ［ｘ’］［ｙ’］＝０であるかを判定する（Ｓ６２６０）。そうであるならば変数Ｃに１を加算してＣを更新する（Ｃ６２７０）。すなわちＣ＝Ｃ＋１を実行する。もしそうでない場合、あるいはＳ６２７０を実行した場合、配列Ｅ２［ｘ’］［ｙ’］＝１となる次の点（ｘ’，ｙ’）について、同様の処理を実行する。
【０１６１】
配列Ｅ２［ｘ’］［ｙ’］＝１となるすべての点（ｘ’，ｙ’）について処理を実行した後、Ｃ≧２であるかを判定する（Ｓ６２８０）。もしＣ≧２であるならば、点（ｘ，ｙ）が１線であるかを判定する（Ｓ６２９０）。一方、Ｃ≧２ではないならば、配列Ｅ１［ｘ］［ｙ］＝０を代入する（Ｓ６３００）。またＳ６２９０において、点（ｘ，ｙ）が１線であるならば、配列Ｅ１［ｘ］［ｙ］＝０を代入する（Ｓ６３００）。
【０１６２】
Ｓ６２９０において点（ｘ，ｙ）が１線ではない場合、またはＳ６３００において配列Ｅ１［ｘ］［ｙ］＝０を代入した場合、配列Ｅ１［ｘ］［ｙ］＝１となる次の点（ｘ，ｙ）について、上述と同様の処理を実行する。
【０１６３】
以上のように配列Ｅ１［ｘ］［ｙ］＝１となるすべての点（ｘ，ｙ）についてＳ６２２０乃至Ｓ６３００の処理が終了後、配列Ｅ１［ｘ］［ｙ］＝１となる点があるかを判定する（Ｓ６３１０）。もし配列Ｅ１［ｘ］［ｙ］＝１となる点がない場合には、第２外部処理部２１７における処理を終了し、現在の盤面の状態における死活判定実行部２１８での総あたりでの死活判定処理を実行させる（Ｓ６２０）。
【０１６４】
一方、Ｓ６３１０において配列Ｅ１［ｘ］［ｙ］＝１となる点がある場合には、配列Ｅ１［ｘ］［ｙ］＝１となる点について、Ｂｏａｒｄ［ｘ］［ｙ］＝ｔｎ＾３、Ａｒｅａ［ｘ］［ｙ］＝０を代入する（Ｓ６３２０）。そして再度、処理Ｂに戻り、第２外部処理部２１７が上述の処理を実行する。すなわちＳ６２００以降の処理を実行する。
【０１６５】
以上の処理を実行することで、図２４におけるＳ４８０乃至Ｓ４９０に相当する処理を実行することが出来る。
【０１６６】
そして以上のようにして処理Ａ、処理Ｂを実行すると、当初の状態から盤面の状態が変形され、判定領域となる点が狭められる。そしてこの狭められた点に対して、死活判定実行部２１８が総あたりでの死活判定処理を従来と同様に実行する（Ｓ６２０）。
【０１６７】
そしてこの死活判定処理の結果、活き（勝ち）となる点が１点以上存在している場合には（Ｓ６３０）、死活判定処理として活き（勝ち）として最終結果を判定する（Ｓ６４０）。
【０１６８】
一方、Ｓ６２０の死活判定処理の結果、活き（勝ち）となる点が１点も存在しない場合には（Ｓ６３０）、盤面の情報を初期状態に戻し、死活判定実行部２１８が通常どおりの死活判定処理を実行し（Ｓ６５０）、その結果を最終結果として判定する。
【０１６９】
以上のようにして死活判定処理部２１ｂで死活判定の処理結果を判定すると、出力処理部２２は、その処理結果を対局者端末３に送信する。
【０１７０】
本実施例のように、単純な総あたりによる死活判定処理を実行する前に、外部を基準として、外部の石の色と同色の石を所定の条件で判定領域内に新たに配置することで、死活判定処理の際の総あたりの処理対象を減らすことが出来る。そして、外部を狭めて死活判定をし、それでも活きている場合には、もとの盤面の状態でも活きと判定する処理を実行することで、判定対象となる石の死活判定処理を高速に実現することが出来る。
【実施例３】
【０１７１】
次に、死活判定処理部２１ｃにおける高速処理の第３の実施例を以下に説明する。本実施例における死活判定処理部２１ｃの処理機能の一例の概念図を図５４に示す。本実施例の死活判定処理部２１ｃでは、総あたりの死活判定処理を行うにあたり、判定領域の盤面を所定の方法で分割し、それぞれの眼形に変形した上で、死活判定処理を実行する場合を示す。つまり、判定領域の盤面を所定の方法で分割し、分割した領域のうち一の領域について、もっとも不利な眼形の形状に変形した上で、判定領域全体の死活判定処理を実行する場合である。
【０１７２】
本実施例の死活判定処理部２１ｃには、領域分割処理部２１９と０眼変形処理部２２０と後手１眼変形処理部２２２と１眼変形処理部２２２と死活判定実行部２２３とを備える。
【０１７３】
領域分割処理部２１９は、判定領域において、外部と隣接している判定対象の石から、同色で隣接している石のつながりを再帰的に判定し、もう一方の端が別の外部と隣接しているかを判定する。このような石のつながりを判定することで、判定領域における盤面を分割する。
【０１７４】
０眼変形処理部２２０は、領域分割処理部２１９で判定した領域のうちの一つの領域について、０眼となるように変形を行う。具体的には、当該領域に対して最も判定対象側に不利となる０眼となるように変形させる。例えばすべての点を相手の石を配置することで、変形を行う。例えば図５６に示すように、分割線に隣接する点すべてに外部と同じ石を配置する。図５６では星で示した石が新たに配置される石である。
【０１７５】
後手１眼変形処理部２２１は、領域分割処理部２１９で判定した領域のうちの一つの領域について、後手１眼となるように変形を行う。具体的には、当該領域に対して最も判定対象側に不利となる後手１眼となるように変形させる。例えば当該領域において、分割線に隣接させた相手の２つの石が取り得る状態となるような後手１眼となるように変形を行う。例えば図５７に示すように、黒から打つと１眼、白から打つと０眼となるように配置する。図５７では星で示した石が新たに配置される石である。
【０１７６】
１眼変形処理部２２２は、領域分割処理部２１９で判定した領域のうちの一つの領域について、１眼となるように変形を行う。具体的には当該領域に対して最も判定対象側に不利となる１眼となるように変形させる。例えば当該領域において、分割線に隣接させた相手の２つの石が取り得る状態となる１眼となるように変形を行う。例えば図５８に示すように、黒から打っても白から打っても黒１眼となるように配置する。図５８では星で示した石が新たに配置される石である。
【０１７７】
なお０眼、後手１眼、１眼への変形はどのような変形を行うことも出来、如何なる処理方法を採っても良い。
【０１７８】
死活判定実行部２２３は、分割した領域に対して０眼変形処理部２２０、後手１眼変形処理部２２１、１眼変形処理部２２２のいずれかにおいて変形を行ったあと、その判定領域の全体に対して、死活判定処理を行う。また本来の判定領域に対して、死活判定処理を行う。この死活判定処理は従来と同様の死活判定処理プログラムを用いることが出来る。なお以下の実施例では、総あたりによる死活判定処理を行う場合を示すが、それ以外の従来の死活判定処理プログラムによる方法を用いることも可能である。また総あたりでの死活判定処理とは、従来の死活判定処理プログラムにおいて用いられている死活判定処理であっても良く、必ずしも判定領域内のすべての空点に対する総あたり処理を行わなくても良い。例えば判定領域内の空点のうち、一部の空点については処理を省略するなどの方法であっても良い。例えば、価値が全く同じ着手が複数あった場合、一つの着手のみを実行する、といったように処理を省略する方法などがある。すなわち、死活判定実行部２２３は、任意の方法により、判定領域内にある判定対象の石または目標石に対しての死活判定処理を実行できる方法であれば如何なる方法であっても良い。
【０１７９】
次に本実施例における死活判定処理の処理プロセスの一例を図５５のフローチャートを用いて説明する。
【０１８０】
対局者が利用する対局者端末３同士でネットワークを介して囲碁の対局が行われている。この際に囲碁の対局は対局システムを実現するサーバ２上でその処理が行われている。そしてその対局中、あるいは終局後、対局者のいずれかがその表示される画面から所定のボタン等を押下することで、死活判定処理を行うことの要求が対局者端末３から、死活判定処理を行うサーバ２に送信される。対局画面の一例を図５９に示す。
【０１８１】
対局画面が図５９の場合、その画面のうち、「死活ナビ」など、死活判定処理を行うことを要求するボタンを押下することで、死活判定処理を行うことの要求が対局者端末３からサーバ２に送信される。
【０１８２】
サーバ２の入力受付部２０でその要求を受け付けると、死活判定処理部２１ｃは、対局システムの記憶装置１１から当該盤面の情報（たとえば棋譜の情報）を取得する。そして盤面の情報が含まれた死活判定処理の画面を出力処理部２２が対局者端末３に送信する。この際の画面の一例が図６０である。なお実際に対局している盤面の情報のほか、すでに対局し、所定の記憶装置１１に保存している棋譜の情報、あるいは観戦している対局の棋譜の情報を死活判定処理部２１ｃが対局システムの記憶装置１１から取得し、その棋譜の情報を図６０の画面に含めて対局者端末３に送信しても良い。
【０１８３】
死活判定を行う対局者は、図６０に示す死活判定処理を行う画面から盤面の編集を行う。例えば表示されている石を指定することで、石を取り除いたり、あるいは石を置く。またマウスなどの入力装置１３をドラッグするなどにより、判定領域を指定する。このように死活判定処理を所望する対局者は、適宜、盤面の情報を編集する。この際の編集される石の情報、手番の情報などは、対局者端末３からサーバ２に適宜、送られる。
【０１８４】
上述のように対局者が判定領域を指定することにより、その判定領域内にある結論を出すべき石を判定対象の石として設定される。
【０１８５】
編集後の死活判定処理を行う画面の一例を図６１に示す。なお図６１では判定対象の石が黒の９子、手番は黒であるとする。従って、この場合、次の順番は黒石であり、さらに黒石から見て黒の９子の死活判定を行うことを意味している。
【０１８６】
例えば図６１の画面における「判定処理」を押下することで、編集後の盤面の情報（棋譜の情報と判定対象の石の情報など）と手番の情報と、死活判定処理を開始することの要求とが対局者端末３からサーバ２に送信される。サーバ２の入力受付部２０で編集後の盤面の情報と手番の情報と死活判定処理を開始することの要求を受け付けると、死活判定処理部２１ｃは、入力を受け付けた編集後の盤面の情報に基づいて、死活判定処理を開始する。
【０１８７】
まず死活判定処理部２１ｃの領域分割処理部２１９は、総あたり処理を開始するにあたり、盤面の棋譜の情報を抽出し、その判定領域を分割することで、分割可能であるかを判定する（Ｓ７００）。すなわち、外部と隣接している判定対象の石から、同色で隣接している石のつながりを再帰的に判定し、他方の端が別の外部と隣接しているかを判定する。そしてこのような石のつながりを検索し、石のつながりがあった場合には、判定領域が分割可能であると判定する。なお以下の実施例では本来の判定領域を２つの領域に分割する場合を説明するが、３以上の領域に分割できる場合、そのうちの１つと残りの全部の領域の判定を行う。そして残りの領域について判定する際に、上述の分割可能かの判定を再帰的に行うことで、３以上の領域に分割できる場合であっても、以下の実施例と同様に処理が行える。
【０１８８】
上述のようにＳ７００で、領域分割処理部２１９が、本来の判定領域が分割可能ではないと判定した場合には（Ｓ７１０）、そのまま処理を中止し、死活判定実行部２２３が、本来の盤面の状態で通常どおりの総あたりの死活判定処理を実行する（Ｓ８４０）。
【０１８９】
一方、Ｓ７００で、領域分割処理部２１９が、本来の判定領域が分割可能であると判定した場合には（Ｓ７１０）、その判定した領域について２つに分割する。この状態を模式的に示すのが図６２である。図６２では黒星で示される石が分割線となる石である。
【０１９０】
そして分割線を境に２つの領域に判定領域を分割する。ここでは分割線より上方を領域Ｒ１、下方を領域Ｒ２とする。この状態を示すのが図６３である。なお上下に分割するほか、左右に分割するなど、如何なる分割であっても良い。
【０１９１】
このように領域分割処理部２１９で２つの領域に分割後、いずれか一方の領域（ここでは領域Ｒ１とする）について、まず０眼変形処理部２２０が０眼となるように変形を行う（Ｓ７２０）。例えば、領域Ｒ１に含まれる石を取り除き、そこに０眼となるように、分割線に隣接する点すべてに外部と同じ石（ここでは白石）を配置する。この状態を模式的に示すのが図６４である。ここで白星が新たに配置された石である。
【０１９２】
そしてＳ７２０で変形処理後、変形処理後の盤面の状態に対して、死活判定実行部２２３が総あたりによる死活判定処理を実行する（Ｓ７３０）。死活判定実行部２２３による死活判定処理の結果、「勝ち」の場合には（Ｓ７４０）、勝ちと判定できるので（Ｓ７５０）、そのまま処理を終了する。図６４の場合、活きないので、Ｓ７４０の処理に移る。
【０１９３】
すなわち、Ｓ７３０における死活判定実行部２２３による死活判定処理の結果、「負け」と判定した場合には（Ｓ７４０）、次に、後手１眼変形処理部２２１が、領域Ｒ１に対して、後手１眼となるように変形を行う（Ｓ７６０）。例えば、領域Ｒ１に含まれる石を取り除き、そこに後手１眼となるように、例えば黒から打つと１眼、白から打つと０眼となるように、配置する。この状態を模式的に示すのが図６５である。ここで白星、黒星が新たに配置された石である。
【０１９４】
そしてＳ７６０で変形処理終了後、変形処理後の盤面の状態に対して、死活判定実行部２２３が総あたりによる死活判定処理を実行する（Ｓ７７０）。死活判定実行部２２３による死活判定処理の結果、「勝ち」の場合には（Ｓ７８０）、次に、盤面をもとの状態に戻し、分割した領域のうちＳ７６０で処理した領域とは別の領域、すなわち領域Ｒ２について、１眼変形処理部２２２が１眼となるように変形を行う（Ｓ７９０）。例えば、領域Ｒ２に含まれる石を取り除き、そこに１眼となるように、例えば黒から打っても白から打っても黒１眼となるように、配置する。この状態を模式的に示すのが図６６である。ここで白星、黒星が新たに配置された石である。
【０１９５】
そしてＳ７９０で変形処理終了後、変形処理後の盤面の状態に対して、死活判定実行部２２３が総あたりによる死活判定処理を実行する（Ｓ８００）。死活判定実行部２２３による死活判定処理の結果、「勝ち」の場合には（Ｓ８７０）、勝ちと判定できるので（Ｓ８８０）、そのまま処理を終了する。図６７の場合、活きるので、処理を終了する。
【０１９６】
一方、Ｓ８７０において死活判定実行部２２３で「負け」と判定した場合には（Ｓ８７０）、
そのまま処理を中止し、死活判定実行部２２３が、本来の盤面の状態で通常どおりの総あたりの死活判定処理を実行する（Ｓ８４０）。
【０１９７】
また、Ｓ７８０において死活判定実行部２２３で活きないと判定した場合には（Ｓ７８０）、次に、１眼変形処理部２２２が、領域Ｒ１に対して、１眼となるように変形を行う（Ｓ８１０）。例えば、領域Ｒ１に含まれる石を取り除き、そこに１眼となるように、例えば黒から打っても白から打っても黒１眼となるように、配置する。
【０１９８】
そしてＳ８１０で変形処理終了後、変形処理後の盤面の状態に対して、死活判定実行部２２３が総あたりによる死活判定処理を実行する（Ｓ８２０）。死活判定実行部２２３による死活判定処理の結果、「負け」の場合には（Ｓ８３０）、盤面をもとの状態に戻し、分割した領域のうちＳ８１０で処理した領域とは別の領域、すなわち領域Ｒ２について、０願変形処理部２２０が０眼となるように変形を行う（Ｓ８３３）。そしてＳ８３３で変形処理終了後、変形処理終了後の盤面の状態に対して、死活判定実行部２２３が総あたりによる死活判定処理を実行する（Ｓ８３５）。死活判定実行部２２３による死活判定処理の結果、「勝ち」の場合には（Ｓ８３７）、勝ちと判定できるので（Ｓ８８０）、そのまま処理を終了する。一方、Ｓ８３５の死活判定実行部２２３で「負け」と判定した場合には（Ｓ８３７）、そのまま処理を中止し、死活判定実行部２２３が、本来の盤面の状態で通常どおりの総あたりの死活判定処理を実行する（Ｓ８４０）。
【０１９９】
一方、Ｓ８２０において死活判定実行部２２３で「勝ち」と判定した場合には（Ｓ８３０）、次に、盤面をもとの状態に戻し、分割した領域のうちＳ８１０で処理した領域とは別の領域、すなわち領域Ｒ２について、後手１眼変形処理部２２１が後手１眼となるように変形を行う（Ｓ８５０）。例えば、領域Ｒ２に含まれる石を取り除き、そこに後手１眼となるように、例えば黒から打つと１眼、白から打つと０眼となるように、配置する。
【０２００】
そしてＳ８５０で変形処理終了後、変形処理後の盤面の状態に対して、死活判定実行部２２３が総あたりによる死活判定処理を実行する（Ｓ８６０）。死活判定実行部２２３による死活判定処理の結果、「勝ち」の場合には（Ｓ８７０）、勝ちと判定できるので（Ｓ８８０）、そのまま処理を終了する。
【０２０１】
一方、Ｓ８６０において死活判定実行部２２３で「負け」と判定した場合には（Ｓ８７０）、そのまま処理を中止し、死活判定実行部２２３が、本来の盤面の状態で通常どおりの総あたりの死活判定処理を実行する（Ｓ８４０）。
【０２０２】
以上のように、総あたりの死活判定処理を行うにあたり、判定領域の盤面を所定の方法で分割し、それぞれの眼形に変形した上で、全体の判定領域の死活判定処理を実行することで、本来の判定領域に対して単純に総あたりの死活判定処理を実行するよりも高速に死活判定処理の結果を知ることが出来る。これは、判定対象の石に２眼があれば生きることに着目したものである。すなわち判定領域を２つに分割し、そのうちの１つの領域について０眼とした場合、他方の領域が活きていればそこが２眼となっているので、全体として判定対象の石が活きると判定できる。また１つの領域について後手１眼とした場合、他方の領域が活きていればそこに１眼があることとなるので、全体として判定対象の石が活きると判定できる。さらに１つの領域について１眼とした場合、他方の領域が活きていればそこに後手１眼があることとなるので、全体として判定対象の石が活きると判定できる。
【０２０３】
このように、活きる石は２眼を持つことが多いことに着目して、判定領域の盤面を分割し、分割した領域を０眼、後手１眼、１眼のいずれかに変形させ、変形させた盤面の状態に対して、総あたりで死活判定処理で活きるかを判定することで、本来の盤面の死活判定処理を行うよりも高速に死活判定処理の結果を得ることが可能となる。
【０２０４】
以上のようにして死活判定処理部２１ｃで死活判定の処理結果を判定すると、出力処理部２２は、その処理結果を対局者端末３に送信する。
【０２０５】
次に上述の各処理のより詳細な説明を図６７乃至図７１を用いて説明する。
【０２０６】
まず死活判定処理部２１ｃは、盤面の情報を読み込み、Ｂｏａｒｄ［ｘ］［ｙ］に空点であるか、黒石が置かれているか、白石が置かれているかを記憶していく。また判定領域Ａｒｅａ［ｘ］［ｙ］にそれぞれ判定領域であるか否かを記憶していく。また上記のほか、判定対象の石Ｈ［ｘ］［ｙ］、判定領域Ａｒｅａ［ｘ］［ｙ］、手番ｔｎなども適宜、設定される。そして、死活判定処理部２１ｃにおける領域分割処理部２１９が判定領域を分割し、分割可能かを判定する。すなわち処理Ｄ１、Ｄ２を実行させる（Ｓ９００）。
【０２０７】
領域分割処理部２１９は、外部のＥ点で、かつＢｏａｒｄ［ｘ］［ｙ］＝ｔｎとなる点について配列Ｒ［ｘ］［ｙ］＝１を代入する（Ｓ１０３０）。そして、Ｒ［ｘ］［ｙ］＝１となる点（ｘ，ｙ）について、Ｓ１０４０乃至Ｓ１０９０を反復処理させる。
【０２０８】
まずＲ［ｘ］［ｙ］＝１となる点（ｘ，ｙ）に配列Ｔ［ｘ］［ｙ］＝１を代入し、それ以外の点にＴ［ｘ］［ｙ］＝０を代入する（Ｓ１０４０）。そして点（ｘ，ｙ）のＥ点でＢｏａｒｄ［ｘ’］［ｙ’］＝ｔｎ、Ｔ［ｘ’］［ｙ’］＝０となる点（ｘ’，ｙ’）について、Ｓ１０５０乃至Ｓ１０９０を反復処理させる。
【０２０９】
まずＴ［ｘ’］［ｙ’］＝１を代入する（Ｓ１０５０）。そして、点（ｘ’，ｙ’）のＥ点に外部が含まれるかを判定し（Ｓ１０６０）、外部に含まれる場合には後述する処理Ｄ２を実行させる。一方、外部に含まれない場合には点（ｘ’，ｙ’）のＥ点（ａ，ｂ）でＴ［ａ］［ｂ］＝１となる点が１点であるかを判定する（Ｓ１０７０）。なおここで（ａ＝ｘ’＋１，ｘ’−１，ｂ＝０）、または、（ｂ＝ｙ’＋１，ｙ’−１，ａ＝０）である。そして１点ではない場合にはＴ［ｘ’］［ｙ’］＝０とする（Ｓ１１００）。また１点である場合には点（ｘ’，ｙ’）のＥ点（ｃ，ｄ）でＴ［ｃ］［ｄ］＝０、Ｂｏａｒｄ［ｃ］［ｄ］＝ｔｎとなる点があるかを判定する（Ｓ１０８０）。なおここで（ｃ＝ｘ’＋１，ｘ’−１，ｄ＝０）、または、（ｄ＝ｙ’＋１，ｙ’−１，ｃ＝０）である。そしてＳ１０８０の条件を満たす点がない場合には、Ｔ［ｘ’］［ｙ’］＝０とする（Ｓ１１００）。
【０２１０】
一方、点（ｘ’，ｙ’）のＥ点（ｃ，ｄ）でＴ［ｃ］［ｄ］＝０、Ｂｏａｒｄ［ｃ］［ｄ］＝ｔｎとなる点がある場合には（Ｓ１０８０）、点（ｘ，ｙ）に点（ｘ’，ｙ’）を代入する（Ｓ１０９０）。以上の処理を、点（ｘ，ｙ）のＥ点でＢｏａｒｄ［ｘ’］［ｙ’］＝ｔｎ、Ｔ［ｘ’］［ｙ’］＝０となる点（ｘ’，ｙ’）のすべてについて処理を行う。すべての点（ｘ’，ｙ’）について処理実行後、点（ｘ，ｙ）の次の点について処理を実行させる。
【０２１１】
以上の処理を、Ｒ［ｘ］［ｙ］＝１となる点（ｘ，ｙ）のすべてについて処理を行う。もし処理が終了した場合には、分割できないと判定できるので（Ｓ１１１０）、領域分割処理部２１９は以降の処理を中止し、死活判定実行部２２３における通常どおりの総あたりによる死活判定処理を実行させる（Ｓ９１０、Ｓ１０２０）。
【０２１２】
上述の処理のＳ１０６０において、点（ｘ’，ｙ’）のＥ点に外部が含まれる場合には処理Ｄ２が実行されるので、それを説明する。まず配列Ｔ［ｘ］［ｙ］をグループ化し、配列Ｇ１［ｘ］［ｙ］に代入する（Ｓ１１２０）。そして配列Ｈ１［ｘ］［ｙ］に配列Ｈ［ｘ］［ｙ］を代入する（Ｓ１１３０）。
【０２１３】
次に配列Ｇ１［ｘ］［ｙ］＝１となる点（ｘ，ｙ）について、Ｈ１［ｘ］［ｙ］＝０を代入する（Ｓ１１４０）。そしてＨ１［ｘ］［ｙ］＝１となる点（ｘ，ｙ）を取り、それを配列Ｈ１［ｘ］［ｙ］でグループ化し、さらにそれを配列Ｈ２［ｘ］［ｙ］に代入する（Ｓ１１５０）。そしてＨ２［ｘ］［ｙ］＝１となる点（ｘ，ｙ）について、Ｈ１［ｘ］［ｙ］＝０を代入する（Ｓ１１６０）。
【０２１４】
次に、Ｈ１［ｘ］［ｙ］＝１となる点（ｘ，ｙ）が存在するかを判定し（Ｓ１１７０）、存在しない場合には処理Ｄ１に戻り、Ｔ［ｘ’］［ｙ’］＝０とする（Ｓ１１００）。一方、Ｈ１［ｘ］［ｙ］＝１となる点（ｘ，ｙ）が存在する場合には、判定領域は分割可能であると判定し、各領域をＲ１，Ｒ２として分割線Ｇ１を配列Ｄ［ｘ］［ｙ］に代入する（Ｓ１１８０）。また領域Ｒ１の各点、領域Ｒ２の各点について、それぞれ配列Ｒ１［ｘ］［ｙ］に配列Ｈ１［ｘ］［ｙ］を代入し、配列Ｒ２［ｘ］［ｙ］に配列Ｈ２［ｘ］［ｙ］を代入する（Ｓ１１８０）。
【０２１５】
以上のような処理を実行することで、図５５におけるＳ７００乃至Ｓ７１０に相当する処理を実現できる。
【０２１６】
そしてＳ１１８０を終了すると、領域分割処理部２１９は、判定領域を分割可能であると判定できるので（Ｓ９１０）、０眼変形処理部２２０および死活判定実行部２２３による処理Ａを実行する（Ｓ９２０）。
【０２１７】
まず０眼変形処理部２２０は、Ｒ１［ｘ］［ｙ］＝１となる点（ｘ，ｙ）について、Ｂｏａｒｄ［ｘ］［ｙ］＝ｔｎ＾３、Ｈ［ｘ］［ｙ］＝０とする（Ｓ１１９０）（なおここでは領域Ｒ１について０眼への変形処理を実行している）。そして死活判定実行部２２３において、通常どおりの総あたりの死活判定処理を実行させる（Ｓ１２００）。
【０２１８】
以上のように処理することで、図５５におけるＳ７２０乃至Ｓ７３０に相当する処理を実行することが出来る。
【０２１９】
以上のように０眼変形処理部２２０で０眼への変形処理を行ったあと、死活判定実行部２２３における死活判定処理を実行した実行結果が勝ちであるならば（Ｓ９３０）、そのまま勝ちと判定できるので（Ｓ９４０）、処理を終了する。
【０２２０】
一方、死活判定実行部２２３における死活判定処理を実行した実行結果が負けであるならば（Ｓ９３０）、次に後手１眼変形処理部２２１および死活判定実行部２２３による処理Ｂを実行する（Ｓ９５０）。
【０２２１】
まず後手１眼変形処理部２２１は、領域Ｒ１と、領域Ｒ１のＥ点に含まれる外部の点（ｘ，ｙ）について、Ｂｏａｒｄ［ｘ］［ｙ］＝０、Ｈ［ｘ］［ｙ］＝０を代入する（Ｓ１２１０）。そして隣接する２点Ｐ１（ｘ１，ｙ１），Ｐ２（ｘ２，ｙ２）でそれぞれのＥ点が分割線Ｄの配列Ｄ［ｘ］［ｙ］に含まれる点について、Ｓ１２２０乃至Ｓ１２６０、Ｓ１２８０乃至Ｓ１３３０の処理を反復する。
【０２２２】
まず点Ｐ１、Ｐ２についてそれぞれ、Ｂｏａｒｄ［ｘ１］［ｙ１］＝ｔｎ＾３、Ｂｏａｒｄ［ｘ２］［ｙ２］＝ｔｎ＾３を代入する（Ｓ１２２０）。そして点Ｐ１、Ｐ２のＥ点となる点（ｘ，ｙ）でＢｏａｒｄ［ｘ］［ｙ］＝ｔｎを代入する（Ｓ１２３０）。そして配列Ｄ［ｘ］［ｙ］を再びグループ化し（分割線Ｄを再びグループ化し）、配列Ｄ２［ｘ］［ｙ］に代入する（Ｓ１２４０）。そしてＤ２［ｘ］［ｙ］＝１となる点のＥ空点（ｘ，ｙ）で、Ｂｏａｒｄ［ｘ］［ｙ］＝ｔｎ＾３を代入する（Ｓ１２５０）。
【０２２３】
次に、Ｓ１２３０で追加した点で、配列Ｄ２［ｘ］［ｙ］＝０かつＳ１２５０で追加した点（ｘ，ｙ）の、Ｅ点に含まれない点Ｐ３（ｘ３，ｙ３）があるかを判定する（Ｓ１２６０）。もしない場合には、次の点の処理に移る。そして２点Ｐ１，Ｐ２でそれぞれのＥ点が分割線Ｄの配列Ｄ［ｘ］［ｙ］に含まれるすべての点について処理を実行したあと、Ｓ１２６０で条件を充足しない場合には、変形が行えない場合なので、そのまま処理を終了し、死活判定実行部２２３における死活判定処理を実行する（Ｓ１２７０）。
【０２２４】
Ｓ１２６０の判定において、条件を充足する点がある場合には、その求めた点Ｐ３についてＢｏａｒｄ［ｘ３］［ｙ３］＝ｔｎ＾３を代入する（Ｓ１２８０）。そして点Ｐ１乃至点Ｐ３のグループのＥ空点、Ｏ空点となる点（ｘ，ｙ）について、Ｂｏａｒｄ［ｘ］［ｙ］＝ｔｎを代入する（Ｓ１２９０）。そして点Ｐ３について、Ｂｏａｒｄ［ｘ３］［ｙ３］＝０とする（Ｓ１３００）。
【０２２５】
そして以上までで追加した点のＥ空点（ｘ，ｙ）について、Ｂｏａｒｄ［ｘ］［ｙ］＝ｔｎ＾３を代入する（Ｓ１３１０）。ここでは後手１眼変形処理部２２１で処理Ｂを実行しているので、通常どおりの総あたりの死活判定処理を実行する（Ｓ１３３０）。
【０２２６】
以上のように処理することで、図５５におけるＳ７６０乃至Ｓ７７０に相当する処理を実行することが出来る。
【０２２７】
以上のように後手１眼変形処理部２２１で後手１眼への変形処理を行ったあと、死活判定実行部２２３における死活判定処理を実行した実行結果が勝ちであるならば（Ｓ９６０）、次に１眼変形処理部２２２および死活判定実行部２２３で処理Ｃ’を実行する（Ｓ９７０）。一方、死活判定処理を実行した実行結果が負けであるならば（Ｓ９６０）、次に１眼変形処理部２２２および死活判定実行部２２３で処理Ｃを実行する（Ｓ１０００）。
【０２２８】
まず処理Ｃ’を実行する場合を説明する。なお図７１のフローチャート、すなわち処理Ｂ、処理Ｃ、処理Ｂ’、処理Ｃ’で用いるフローチャートは基本的に同じであるが、処理Ｂと処理Ｂ’では処理対象となる領域がＲ１かＲ２かで変わる。同様に処理Ｃと処理Ｃ’では処理対象となる領域がＲ１からＲ２かで変わる。
【０２２９】
まず１眼変形処理部２２２は、領域Ｒ２と、領域Ｒ２のＥ点に含まれる外部の点（ｘ，ｙ）について、Ｂｏａｒｄ［ｘ］［ｙ］＝０、Ｈ［ｘ］［ｙ］＝０を代入する（Ｓ１２１０）。そして隣接する２点Ｐ１（ｘ１，ｙ１），Ｐ２（ｘ２，ｙ２）でそれぞれのＥ点が分割線Ｄの配列Ｄ［ｘ］［ｙ］に含まれる点について、Ｓ１２２０乃至Ｓ１２６０、Ｓ１２８０乃至Ｓ１３３０の処理を反復する。
【０２３０】
まず点Ｐ１、Ｐ２についてそれぞれ、Ｂｏａｒｄ［ｘ１］［ｙ１］＝ｔｎ＾３、Ｂｏａｒｄ［ｘ２］［ｙ２］＝ｔｎ＾３を代入する（Ｓ１２２０）。そして点Ｐ１、Ｐ２のＥ点となる点（ｘ，ｙ）についてＢｏａｒｄ［ｘ］［ｙ］＝ｔｎを代入する（Ｓ１２３０）。そして配列Ｄ［ｘ］［ｙ］を再びグループ化し（分割線Ｄを再びグループ化し）、配列Ｄ２［ｘ］［ｙ］に代入する（Ｓ１２４０）。そしてＤ２［ｘ］［ｙ］＝１となる点のＥ空点（ｘ，ｙ）について、Ｂｏａｒｄ［ｘ］［ｙ］＝ｔｎ＾３を代入する（Ｓ１２５０）。
【０２３１】
次に、Ｓ１２３０で追加した点で、配列Ｄ２［ｘ］［ｙ］＝０かつＳ１２５０で追加した点（ｘ，ｙ）の、Ｅ点に含まれない点Ｐ３（ｘ３，ｙ３）があるかを判定する（Ｓ１２６０）。もしない場合には、次の点の処理に移る。そして２点Ｐ１，Ｐ２でそれぞれのＥ点が分割線Ｄの配列Ｄ［ｘ］［ｙ］に含まれるすべての点について処理を実行したあと、Ｓ１２６０で条件を充足しない場合には、変形が行えない場合なので、そのまま処理を終了し、死活判定実行部２２３における死活判定処理を実行する（Ｓ１２７０）。
【０２３２】
Ｓ１２６０の判定において、条件を充足する点がある場合には、その求めた点Ｐ３についてＢｏａｒｄ［ｘ３］［ｙ３］＝ｔｎ＾３を代入する（Ｓ１２８０）。そして点Ｐ１乃至点Ｐ３のグループのＥ空点、Ｏ空点となる点（ｘ，ｙ）について、Ｂｏａｒｄ［ｘ］［ｙ］＝ｔｎを代入する（Ｓ１２９０）。そして点Ｐ３について、Ｂｏａｒｄ［ｘ３］［ｙ３］＝０とする（Ｓ１３００）。
【０２３３】
そして以上までで追加した点のＥ空点（ｘ，ｙ）について、Ｂｏａｒｄ［ｘ］［ｙ］＝ｔｎ＾３を代入する（Ｓ１３１０）。ここでは１眼変形処理部２２２で処理Ｃ’を実行しているので、次に、Ｓ１２９０で追加した点のＥ点で、配列Ｄ２［ｘ］［ｙ］のＥ点に含まれない点（ｘ，ｙ）を一つ求め、Ｂｏａｒｄ［ｘ］［ｙ］＝０を代入する（Ｓ１３２０）。そして死活判定実行部２２３において、通常どおりの総あたりの死活判定処理を実行する（Ｓ１３３０）。
【０２３４】
以上のように処理することで、図５５におけるＳ７９０乃至Ｓ８００に相当する処理を実行することが出来る。
【０２３５】
以上のように１眼変形処理部２２２で１眼への変形処理を行ったあと、死活判定実行部２２３における死活判定処理を実行した実行結果が勝ちであるならば（Ｓ９８０）、全体として勝ちと判定できるので（Ｓ９９０）、そのまま処理を終了する。一方、死活判定処理を実行した実行結果が負けであるならば（Ｓ９８０）、通常どおり、死活判定実行部２２３における総あたりによる死活判定処理を実行させる（Ｓ１０２０）。
【０２３６】
以上のように処理Ｂ、処理Ｃ、処理Ｂ’、処理Ｃ’を図７１のフローチャートに基づいて適宜実行することで、死活判定処理による処理結果を得ることが出来る。
【０２３７】
なお上述のＳ９６０における処理Ｂにおいて、負けと判定したならば、次に１眼変形処理部２２２および死活判定実行部２２３で処理Ｃを上述と同様に実行する（Ｓ１０００）。すなわち、図７１のフローチャートにおいて、処理対象となる領域をＲ１として上述の処理Ｃ’と同様の処理を実行する。
【０２３８】
Ｓ１０００における処理Ｃの結果、すなわち１眼変形処理部２２２で１眼への変形処理を行った後、死活判定実行部２２３における死活判定処理を実行した結果が勝ちであるならば（Ｓ１０１０）、全体として勝ちと判定できるので（Ｓ９９０）、そのまま処理を終了する。一方、死活判定処理を実行した実行結果が負けであるならば（Ｓ１０１０）、さらに０眼変形処理部２２０および死活判定実行部２２３で処理Ａ’を上述と同様に実行する（Ｓ１０１３）。
【０２３９】
なお処理Ａ’とは、図７０に示すフローチャートにおける処理Ａと同様の処理であるが、その処理対象となる領域がＲ１ではなく、領域Ｒ２の場合である。
【０２４０】
そしてＳ１０１３における処理Ａ’の結果、すなわち０眼変形処理部２２０で０眼への変形処理を行った後、死活判定実行部２２３における死活判定処理を実行した結果が勝ちであるならば（Ｓ１０１５）、全体として勝ちと判定できるので（Ｓ９９０）、そのまま処理を終了する。一方、死活判定処理を実行した実行結果が負けであるならば（Ｓ１０１５）、通常どおり、死活判定実行部２２３における総あたりによる死活判定処理を実行させる（Ｓ１０２０）。
【０２４１】
以上のようにして死活判定処理部２１ｃで死活判定の処理結果を判定すると、出力処理部２２は、その処理結果を対局者端末３に送信する。
【０２４２】
本実施例のように、判定領域の盤面を所定の方法で分割し、それぞれの眼形を判定することで、活きる石は２眼を持つことが多いという特性を利用した簡易的な判定を行うことが可能となる。
【実施例４】
【０２４３】
次に、死活判定処理部２１ｄにおける高速処理の第４の実施例を以下に説明する。本実施例における死活判定処理部２１ｄの処理機能の一例の概念図を図７２に示す。本実施例の死活判定処理部２１ｄでは、着手を制限し、通常の活きの条件のほかに判定対象の石に隣接する空点が多ければ活きと判定することで、容易に死ぬ石かどうかを判定する方法である。なお、この判定方法を本明細書では緩みシチョウを用いた判定方法という。
【０２４４】
本実施例の死活判定処理部２１ｄには、Ｅ空点カウント処理部２２４と簡易判定処理部２２５とを備える。
【０２４５】
Ｅ空点カウント処理部２２４は、判定対象の石のＥ空点の数をカウントする。
【０２４６】
簡易判定処理部２２５は、緩みシチョウを用いることにより、Ｅ空点カウント処理部２２４においてカウントしたＥ空点の数に基づいて、攻撃側または防御側の着手の優先度を決定し、その優先度に従って攻撃側または防御側の着手を実行し、攻撃側において判定対象の石のＥ空点の数が４以上の場合に攻撃側の負け、攻撃側において判定対象の石のＥ空点の数が１の場合に攻撃側の勝ち、と判定する。なお攻撃側または防御側のＥ空点の数に応じた着手の優先度の決定処理は以下の通りである。
【０２４７】
まず攻撃側について、Ｅ空点カウント処理部２２４においてカウントした、判定対象の石のＥ空点の数が４点以上の場合には、緩みシチョウで取ることが出来ないので、攻撃側の負けと判定する。
【０２４８】
攻撃側について、Ｅ空点カウント処理部２２４においてカウントした、判定対象の石のＥ空点の数が３点の場合、Ｅ空点のうち、その点を防御側が着手した時のＥ空点の数を数え、それが多い順に優先度を決定し、着手を行う。
【０２４９】
攻撃側について、Ｅ空点カウント処理部２２４においてカウントした、判定対象の石のＥ空点の数が２点の場合、以下の順序で着手を行う。まず第１に、Ｅ点となる攻撃側の石のＥ空点をＥ空点カウント処理部２２４でカウントし、１点の場合にはそのＥ空点に着手する。第２に、Ｅ空点のうち、その点を防御側が着手した時のＥ空点の数をＥ空点カウント処理部２２４でカウントし、それが多い順に着手する。第３に、Ｏ空点に着手する。第４に、Ｅ空点のＥ空点に着手する。第５に、Ｅ空点のＯ空点に着手する。第６に、Ｏ空点のＥ空点に着手する。
【０２５０】
攻撃側について、Ｅ空点カウント処理部２２４においてカウントした、判定対象の石のＥ空点の数が１点の場合は、その点に着手する。この時点で攻撃側の勝ちと判定する。
【０２５１】
次に防御側について、判定対象の石のＥ空点の数をＥ空点カウント処理部２２４でカウントし、それが２点であれば、以下の順序で着手を行う。まず第１に、Ｅ点となる攻撃側の石のＥ空点の数をＥ空点カウント処理部２２４でカウントし、１点のときにはそのＥ空点に着手する。第２に、Ｅ点となる攻撃側の石のＥ空点の数をＥ空点カウント処理部２２４でカウントし、２点のときはそのＥ空点のいずれかに着手する。第３に、Ｅ空点のうち、その点を着手した時のＥ空点の数をＥ空点カウント処理部２２４でカウントし、それが多い順に着手する。第４に、Ｏ空点に着手する。第５に、Ｅ空点のＥ空点に着手する。第６に、Ｅ空点のＯ空点に着手する。第７に、Ｏ空点のＥ空点に着手する。
【０２５２】
防御側について、判定対象の石のＥ空点の数をＥ空点カウント処理部２２４でカウントし、それが１点であれば、以下の順序で着手を行う。まず第１に、Ｅ点となる攻撃側の石のＥ空点をＥ空点カウント処理部２２４でカウントし、それが１点のときにはそのＥ空点に着手する。第２に、Ｅ空点に着手する。
【０２５３】
以上のような処理を、簡易判定処理部２２５は、攻撃側および防御側について交互に行い、攻撃側のＥ空点の数が４点以上、または１点となるまで繰り返し反復する。
【０２５４】
次に本実施例における死活判定処理の処理プロセスの一例を図７３のフローチャートを用いて説明する。
【０２５５】
対局者が利用する対局者端末３同士でネットワークを介して囲碁の対局が行われている。この際に囲碁の対局は対局システムを実現するサーバ２上でその処理が行われている。そしてその対局中、あるいは終局後、対局者のいずれかがその表示される画面から所定のボタン等を押下することで、死活判定処理を行うことの要求が対局者端末３から、死活判定処理を行うサーバ２に送信される。対局画面の一例を図７４に示す。
【０２５６】
対局画面が図７４の場合、その画面のうち、「死活ナビ」など、死活判定処理を行うことを要求するボタンを押下することで、死活判定処理を行うことの要求が対局者端末３からサーバ２に送信される。
【０２５７】
サーバ２の入力受付部２０でその要求を受け付けると、死活判定処理部２１ｄは、対局システムの記憶装置１１から当該盤面の情報（たとえば棋譜の情報）を取得する。そして盤面の情報が含まれた死活判定処理の画面を出力処理部２２が対局者端末３に送信する。この際の画面の一例が図７５である。なお実際に対局している盤面の情報のほか、すでに対局し、所定の記憶装置１１に保存している棋譜の情報、あるいは観戦している対局の棋譜の情報を死活判定処理部２１ｄが対局システムの記憶装置１１から取得し、その棋譜の情報を図７５の画面に含めて対局者端末３に送信しても良い。
【０２５８】
死活判定を行う対局者は、図７５に示す死活判定処理を行う画面から盤面の編集を行う。例えば表示されている石を指定することで、石を取り除いたり、あるいは石を置く。またマウスなどの入力装置１３をドラッグするなどにより、判定領域を指定する。このように死活判定処理を所望する対局者は、適宜、盤面の情報を編集する。この際の編集される石の情報、手番の情報は、対局者端末３からサーバ２に適宜、送られる。
【０２５９】
上述のように対局者が判定領域を指定することにより、その判定領域内にある結論を出すべき石が判定対象の石として設定される。また、対局者が判定対象の石のうち、さらに特定の石を結論を出すべき石（目標石）として設定する場合には、それを目標石として設定する。判定対象の石のうち少なくとも一つの石が活きる時には死活判定の結論は活きとなり、すべての石が取られる場合、結論は死にとなる。なお、目標石を指定した場合には、目標石のすべてが活きる時には死活判定の結論は活きとなり、目標石のうち少なくとも一つが取られる場合、死活判定の結論は死にとなる。なお目標石の指定は必須ではなく、また目標石を指定するかしないかではその処理には差がなく、活き死にの判断基準が変わるだけである。従って、目標石を指定した場合には、「判定対象の石」との記載を「目標石」と適宜読み替え、各グループ化された目標石についてそれぞれ処理を行うことで、その処理が可能となる。
【０２６０】
編集後の死活判定処理を行う画面の一例を図７６に示す。なお図７６では目標石が黒の２子（黒星）、手番は白であるとする。従って、この場合、次の順番は白石であり、さらに白石から見て黒の２子の死活判定を行うことを意味している。
【０２６１】
例えば図７６の画面における「判定処理」を押下することで、編集後の盤面の情報（棋譜の情報と判定対象の石の情報など）と手番の情報と、死活判定処理を開始することの要求とが対局者端末３からサーバ２に送信される。サーバ２の入力受付部２０で編集後の盤面の情報と手番の情報と死活判定処理を開始することの要求を受け付けると、死活判定処理部２１ｄは、入力を受け付けた編集後の盤面の情報に基づいて、死活判定処理を開始する。
【０２６２】
まず死活判定処理部２１ｄのＥ空点カウント処理部２２４は、目標石である判定対象の石のＥ空点の数をカウントする（Ｓ１４００）。ここでＥ空点の数が１点であれば（Ｓ１４１０）、簡易判定処理部２２５は攻撃側の勝ちであることを判定し（Ｓ１４２０）、そのまま処理を終了する。またＥ空点の数が４以上であれば（Ｓ１４１０）、簡易判定処理部２２５は攻撃側の負けであることを判定し（Ｓ１４３０）、そのまま処理を終了する。
【０２６３】
図７６の場合、Ｅ空点の数は図７７に示すように３点ある。そのため、簡易判定処理部２２５は、各Ｅ空点について、上記の順序に従って、着手の優先順位を決定する（Ｓ１４４０）。ここでは、Ｅ空点１が防御側が着手した時のＥ空点が５カ所、Ｅ空点２が防御側が着手した時のＥ空点が４カ所、Ｅ空点３が防御側が着手した時のＥ空点が３カ所であるので、この優先順位に従って、着手の優先順位を決定する。
【０２６４】
従って、簡易判定処理部２２５は、まず優先順位が最も高いＥ空点１に着手する（Ｓ１４５０）。これを模式的に示すのが図７８である。
【０２６５】
次に、簡易判定処理部２２５は、このＥ空点１に対して攻撃側が着手したことに対し、防御側のすべての着手で攻撃側が目標石を取れるかを判定する（Ｓ１４６０）。もし目標石が防御側のすべての着手で取れる場合には、その時点で簡易判定処理部２２５は処理を中止し、攻撃側の勝ちを判定する（Ｓ１４９０）。一方、目標石が防御側のいずれかの着手で取られない場合には（Ｓ１４６０）、Ｓ１４５０で設定した優先順位の次の順位で着手を行う（Ｓ１４８０、Ｓ１４５０）。すなわち、図７７のＥ空点２に着手することとなる。これを模式的に示すのが、図７９である。
【０２６６】
そして、上記と同様に、簡易判定処理部２２５は、このＥ空点２に対して攻撃側が着手したことに対し、防御側のすべての着手で攻撃側が目標石を取れるかを判定する（Ｓ１４６０）。もし目標石が防御側のすべての着手で取れる場合には、その時点で簡易判定処理部２２５は処理を中止し、攻撃側の勝ちを判定する（Ｓ１４９０）。一方、目標石が防御側のいずれかの着手で取られない場合には（Ｓ１４６０）、Ｓ１４５０で設定した優先順位の次の順位で着手を行う（Ｓ１４８０、Ｓ１４５０）。すなわち、図７８のＥ空点３に着手することとなる。これを模式的に示すのが、図８０である。
【０２６７】
そして、上記と同様に、簡易判定処理部２２５は、このＥ空点３に対して攻撃側が着手したことに対し、防御側のすべての着手で攻撃側が目標石を取れるかを判定する（Ｓ１４６０）。もし目標石が防御側のすべての着手で取れる場合には、その時点で簡易判定処理部２２５は処理を中止し、攻撃側の勝ちを判定する（Ｓ１４９０）。一方、目標石が防御側のいずれかの着手で取られない場合には（Ｓ１４６０）、Ｓ１４５０で設定した優先順位の次の順位で着手を行うが（Ｓ１４８０）、すべての優先順位で着手を行ってしまったので、簡易判定処理部２２５は、攻撃側の負けを判定し、処理を終了する（Ｓ１４９０）。
【０２６８】
以上のようにして死活判定処理部２１ｄで死活判定の処理結果を判定すると、出力処理部２２は、その処理結果を対局者端末３に送信する。
【０２６９】
なお上述のＳ１４６０で防御側のすべての着手で攻撃側が取れるか取れないかを判定するためには、防御側がＥ空点カウント処理部２２４でカウントしたＥ空点の数に応じて着手した点に対し、さらに攻撃側が、Ｅ空点カウント処理部２２４でカウントしたＥ空点の数に応じて着手する、といったように順に優先順位に従った処理を行う必要がある。そこで、以下に、図７８の状態から、防御側の処理を説明する。
【０２７０】
図７８の状態に攻撃側が着手した場合、Ｅ空点カウント処理部２２４がカウントするＥ空点の数は、２カ所である。従って、第１に、Ｅ点となる攻撃側の石のＥ空点が２カ所の点、第２に、Ｅ空点、第３に、Ｏ空点、第４に、Ｅ空点のＥ空点、第５に、Ｅ空点のＯ空点、第６にＯ空点のＥ空点の優先順位を各点に判定することが出来る。これを模式的に示すのが、図８１である。
【０２７１】
この場合、優先順位が高いＥ空点１が２点あるので、例えば上方にあるＥ空点１に着手する。これを模式的に示すのが図８２である。
【０２７２】
次に図８２の状態に防御側が着手した場合、Ｅ空点カウント処理部２２４がカウントするＥ空点の数は２点なので、上述の優先順位に従って着手する。すなわち、第１に、Ｅ点となる攻撃側の石のＥ空点が１カ所の点、第２に、Ｅ空点、第３に、Ｏ空点、第４に、Ｅ空点のＥ空点、第５に、Ｅ空点のＯ空点、第６にＯ空点のＥ空点の優先順位を、各点について判定することが出来る。これを模式的に示すのが、図８３である。
【０２７３】
そうすると優先順位が最も高いのがＥ空点１なので、攻撃側はそこに着手することとなる。これを模式的に示すのが図８４である。
【０２７４】
次に図８４の状態に攻撃側が着手した場合、Ｅ空点カウント処理部２２４がカウントするＥ空点の数は１点なので、上述の防御側の優先順位に従って着手する。すなわち、Ｅ空点が１点で、かつＥ点となる攻撃側の石にＥ空点が１点となるものがないので、残りのＥ空点に着手することとなる。これを模式的に示すのが図８５である。
【０２７５】
従って防御側はそこに着手することとなる。これを模式的に示すのが図８６である。
【０２７６】
次に図８６の状態に防御側が着手した場合、Ｅ空点カウント処理部２２４がカウントするＥ空点の数は２点なので、上述の優先順位に従って着手する。なお目標石と繋がっている同じ色についても目標石として処理を行うこととなる。すなわち、第１に、Ｅ点となる防御側が着手したときのＥ空点が３カ所の点、第２に、Ｅ点となる防御側が着手したときのＥ空点が２カ所の点、第３に、Ｏ空点、第４に、Ｅ空点のＥ空点、第５に、Ｅ空点のＯ空点、第６にＯ空点のＥ空点の優先順位を、各点について判定することが出来る。これを模式的に示すのが、図８７である。
【０２７７】
そうすると優先順位が最も高いのがＥ空点１なので、攻撃側はそこに着手することとなる。攻撃側が着手した状態を模式的に示すのが図８８である。
【０２７８】
次に図８８の状態に攻撃側が着手した場合、Ｅ空点カウント処理部２２４がカウントするＥ空点の数は１点なので、上述の優先順位に従って着手する。すなわち、Ｅ空点が１点で、かつＥ点となる攻撃側の石にＥ空点が１点となるものがないので、残りのＥ空点に着手することとなる。これを模式的に示すのが図８９である。
【０２７９】
従って防御側はそこに着手することとなる。これを模式的に示すのが図９０である。
【０２８０】
次に図９０の状態に防御側が着手した場合、Ｅ空点カウント処理部２２４がカウントするＥ空点の数は１点なので、上述の優先順位に従って着手する。これを模式的に示すのが図９１である。すなわち、Ｅ空点１に着手するとともに、攻撃側の勝ちを判定する。これを模式的に示すのが図９２である。
【０２８１】
以上のように行うことで攻撃側の勝ちを判定できるが、これは図８１の状態において、優先順位が「１」である２点のうち、上方にあるＥ空点１に着手した場合である（これが図８２である）。従ってもう一つの優先順位が「１」である点については、攻撃側の勝ちを簡易判定処理部２２５は判定できていないので、もう一つの点について着手した場合を、簡易判定処理部２２５は判定する。すなわち、一度、盤面の状態を図８１の状態に戻した上で、もう一つの優先順位が「１」である点に着手する。これを模式的に示すのが図９３である。
【０２８２】
次に図９３の状態に防御側が着手した場合、Ｅ空点カウント処理部２２４がカウントするＥ空点の数は２点なので、上述の優先順位に従って着手する。すなわち、第１に、Ｅ点となる攻撃側の石のＥ空点が１カ所の点、第２に、Ｅ点となる防御側が着手したときのＥ空点が２カ所の点、第２に、Ｅ点となる防御側が着手したときのＥ空点が１カ所の点、第３に、Ｏ空点、第４に、Ｅ空点のＥ空点、第５に、Ｅ空点のＯ空点、第６にＯ空点のＥ空点の優先順位を、各点について判定することが出来る。これを模式的に示すのが、図９４である。
【０２８３】
そうすると優先順位が最も高いのがＥ空点１なので、攻撃側はそこに着手することとなる。攻撃側が着手した状態を模式的に示すのが図９５である。
【０２８４】
次に図９５の状態に攻撃側が着手した場合、Ｅ空点カウント処理部２２４がカウントするＥ空点の数は２点なので、上述の優先順位に従って着手する。すなわち、第１に、Ｅ点のうち防御側が着手したときのＥ空点が２カ所の点、第２に、Ｏ空点、第３に、Ｅ空点のＥ空点、第４に、Ｅ空点のＯ空点、第５に、Ｏ空点のＥ空点の優先順位を、各点について判定することが出来る。これを模式的に示すのが図９６である。
【０２８５】
図９６の状態では優先順位が「１」である点（Ｅ空点１）が２点ある。そこでまずＥ空点１のうち、上方のＥ空点１に防御側は着手する。これを模式的に示すのが図９７である。なお下方のＥ空点１についても、上方のＥ空点１に着手した場合の処理が終了したあとで着手し、同様に判定する。
【０２８６】
次に図９７の状態に防御側が着手した場合、Ｅ空点カウント処理部２２４がカウントするＥ空点の数は２点なので、上述の優先順位に従って着手する。すなわち、第１に、Ｅ点となる防御側が着手したときのＥ空点が３カ所の点、第２に、Ｅ点となる防御側が着手したときのＥ空点が２カ所の点、第３に、Ｏ空点、第４に、Ｅ空点のＥ空点、第５に、Ｅ空点のＯ空点、第６にＯ空点のＥ空点の優先順位を、各点について判定することが出来る。これを模式的に示すのが、図９８である。
【０２８７】
そうすると優先順位が最も高いのがＥ空点１なので、攻撃側はそこに着手することとなる。攻撃側が着手した状態を模式的に示すのが図９９である。
【０２８８】
次に図９９の状態に攻撃側が着手した場合、Ｅ空点カウント処理部２２４がカウントするＥ空点の数は１点なので、上述の優先順位に従って着手する。すなわち、Ｅ空点カウント処理部２２４がカウントするＥ空点の数は１点なので、上述の優先順位に従って着手する。すなわち、Ｅ空点が１点で、かつＥ点となる攻撃側の石にＥ空点が１点となるものがないので、残りのＥ空点に着手することとなる。これを模式的に示すのが図１００である。
【０２８９】
従って防御側はそこに着手することとなる。これを模式的に示すのが図１０１である。
【０２９０】
次に図１０１の状態に防御側が着手した場合、Ｅ空点カウント処理部２２４がカウントするＥ空点の数は１点なので、上述の優先順位に従って着手する。これを模式的に示すのが図１０２である。すなわち、Ｅ空点１に着手するとともに、攻撃側の勝ちを判定する。これを模式的に示すのが図１０３である。
【０２９１】
以上のように行うことで攻撃側の勝ちを判定できるが、これは図９６の状態において、優先順位が「１」である２点のうち、上方にあるＥ空点１に着手した場合である（これが図９７である）。従ってもう一つの優先順位が「１」である点については、攻撃側の勝ちを簡易判定処理部２２５は判定できていないので、もう一つの点について着手した場合を、簡易判定処理部２２５は判定する。すなわち、一度、盤面の状態を図９６の状態に戻した上で、もう一つの優先順位が「１」である点に着手する。これを模式的に示すのが図１０４である。
【０２９２】
上述の処理を簡易判定処理部２２５は、攻撃側、防御側についてそれぞれＥ空点の数に応じた着手を繰り返す。そして、簡易判定処理部２２５は、攻撃側、防御側のいずれについても優先順位が高い順にそれぞれ着手を行う。その結果、攻撃側の特定の着手について攻撃側で取れる場合は攻撃側の勝ち、攻撃側のすべての着手で取れないような防御側の着手がある場合には攻撃側の負けと判定する。
【０２９３】
このような処理を用いることで、特に終局状態の盤面で特定の石、すなわち目標石が取られるかを高速に判定することが出来る。
【０２９４】
次に上述の各処理のより詳細な説明を図１０５乃至図１１６を用いて説明する。
【０２９５】
まず死活判定処理部２１ｄは、盤面の情報を読み込み、Ｂｏａｒｄ［ｘ］［ｙ］に空点であるか、黒石が置かれているか、白石が置かれているかを記憶していく。また判定領域Ａｒｅａ［ｘ］［ｙ］にそれぞれ判定領域であるか否かを記憶していく。また上記のほか、判定対象の石Ｈ［ｘ］［ｙ］、判定領域Ａｒｅａ［ｘ］［ｙ］、手番ｔｎなども適宜、設定される。そして、死活判定処理部２１ｄにおけるＥ空点カウント処理部２２４が、Ｂｏａｒｄ［ｘ］［ｙ］、Ｈ［ｘ］［ｙ］から、Ｈ［ｘ］［ｙ］のＥ空点を取得し、配列Ｅ１［ｘ］［ｙ］に代入する（Ｓ１５００）。
【０２９６】
そして簡易判定処理部２２５は、配列Ｅ１［ｘ］［ｙ］＝１となる点の数に応じて、Ｓ１５２０乃至Ｓ１５５０に応じた処理を行う（Ｓ１５１０）。
【０２９７】
まずＥ１［ｘ］［ｙ］＝１となる点の数が４以上の場合、簡易判定処理部２２５は、攻撃側の負けであることを判定し（Ｓ１５２０）、そのまま処理を終了する。また、Ｅ１［ｘ］［ｙ］＝１となる点の数が１である場合、簡易判定処理部２２５は、攻撃側の勝ちであることを判定し（Ｓ１５３０）、そのまま処理を終了する。
【０２９８】
またＥ１［ｘ］［ｙ］＝１となる点の数が３の場合、簡易判定処理部２２５は、処理Ｂを実行し（Ｓ１５４０）、処理Ｂが終了後、さらに処理Ｄを実行する（Ｓ１５６０）。
【０２９９】
一方、Ｅ１［ｘ］［ｙ］＝１となる点の数が２の場合、簡易判定処理部２２５は、処理Ｃを実行し（Ｓ１５５０）、処理Ｃが終了後、さらに処理Ｄを実行する（Ｓ１５６０）。
【０３００】
以上のような処理を簡易判定処理部２２５は実行する。
【０３０１】
次に、まず処理Ｂを説明する。簡易判定処理部２２５は、Ｅ１［ｘ］［ｙ］＝１となる点（ｘ，ｙ）についてＳ１６００乃至Ｓ１６３５を反復処理する。
【０３０２】
すなわち、まずＥ１［ｘ］［ｙ］＝１となる点（ｘ，ｙ）についてＢｏａｒｄ［ｘ］［ｙ］＝ｔｎ＾３を代入する（Ｓ１６００）。そして配列Ｂｏａｒｄ［ｘ］［ｙ］についてグループ化し、配列Ｈ２［ｘ］［ｙ］に代入する（Ｓ１６１０）。次に、配列Ｈ２［ｘ］［ｙ］のＥ空点を取得し、配列Ｅ２［ｘ］［ｙ］に代入する（Ｓ１６２０）。そして、その点（ｘ，ｙ）を配列Ｏｒｄｅｒ［ｉ］に追加し（配列Ｏｒｄｅｒ［ｉ］．ｘにｘを、配列Ｏｒｄｅｒ［ｉ］．ｙにｙを代入）、Ｏｒｄｅｒ［ｉ］．ｖにＥ２［ｘ］［ｙ］＝１となる点の数を代入する（Ｓ１６３０）。また配列Ｂｏａｒｄ［ｘ］［ｙ］＝０を代入する（Ｓ１６３５）。
【０３０３】
以上の処理をＥ１［ｘ］［ｙ］＝１となるすべての点（ｘ，ｙ）について処理を行い、処理終了後、配列Ｏｒｄｅｒを、その要素ｖが大きい順に並べ替える（Ｓ１６４０）。
【０３０４】
以上のようにして簡易判定処理部２２５は処理Ｂを実行し、その後、処理Ｄを実行する。
【０３０５】
まずｉ＝０からｉ＜３６１になるまで、Ｓ１６５０乃至Ｓ１６６０を反復処理する。
【０３０６】
すなわち、まず手番ｔｎで配列Ｏｒｄｅｒ［ｉ］の点（ｘ，ｙ）に着手可能かを判定し（Ｓ１６５０）、着手不可能ならば次のｉの処理に移る。一方、着手可能ならば、着手を行い、配列Ｂｏａｒｄ［ｘ］［ｙ］、配列Ｈ［ｘ］［ｙ］を更新する（Ｓ１６５５）。すなわちＢｏａｒｄ［ｘ］［ｙ］＝ｔｎとし、さらに着手したことによって相手の石が取れる場合には、取れる石の位置における配列Ｂｏａｒｄの値についても適宜更新する。また判定対象の石と隣接している石についても配列Ｈ［ｘ］［ｙ］＝１として適宜更新する。さらにグループ化できる場合には、配列Ｈ［ｘ］［ｙ］を再グループ化する。その後、後述する処理Ｅを実行し、処理Ｅの判定結果が勝ちならば（Ｓ１６６０）、簡易判定処理部２２５は攻撃側の勝ちと判定し（Ｓ１６７０）、処理を終了する。一方、処理Ｅの判定結果が負けならば次のｉの処理に移る。
【０３０７】
以上の処理をｉ＜３６１となるまで反復し、処理を終了した場合、簡易判定処理部２２５は攻撃側の負けと判定し（Ｓ１６８０）、処理を終了する。
【０３０８】
次に、図１０５のＳ１５５０における処理Ｃを説明する。
【０３０９】
簡易判定処理部２２５は、Ｈ［ｘ］［ｙ］の空点ではないＥ点について、配列Ｅ２［ｘ］［ｙ］に代入する（Ｓ１７００）。そして、Ｅ２［ｘ］［ｙ］＝１となるすべての点（ｘ，ｙ）について、Ｓ１７１０乃至Ｓ１７４０を反復処理する。
【０３１０】
すなわち、まずＢｏａｒｄ［ｘ］［ｙ］をグループ化し、配列Ｇ［ｘ］［ｙ］に代入する（Ｓ１７１０）。そして配列Ｇ［ｘ］［ｙ］のＥ空点を配列Ｇ２［ｘ］［ｙ］に代入する（Ｓ１７２０）。そして配列Ｇ２［ａ］［ｂ］＝１（１≦ａ，ｂ≦１９）となる点（ａ，ｂ）の数を判定し（Ｓ１７３０）、それが１点以外の場合には、次の点（ｘ，ｙ）に移る。一方、配列Ｇ２［ａ］［ｂ］＝１となる点の数が１点の場合には、点（ａ，ｂ）を配列Ｏｒｄｅｒ［ｉ］に追加し（配列Ｏｒｄｅｒ［ｉ］．ｘにａを、配列Ｏｒｄｅｒ［ｉ］．ｙにｂを代入）、Ｏｒｄｅｒ［ｉ］．ｖ＝５０００とする（Ｓ１７４０）。
【０３１１】
以上の処理をＥ２［ｘ］［ｙ］＝１となるすべての点（ｘ，ｙ）について行い、その処理終了後、処理Ｃ２を実行する。
【０３１２】
まずＥ１［ｘ］［ｙ］＝１となるすべての点（ｘ，ｙ）について、Ｓ１７５０乃至Ｓ１７９０を反復処理する。
【０３１３】
すなわち、Ｅ１［ｘ］［ｙ］＝１となる点（ｘ，ｙ）についてＢｏａｒｄ［ｘ］［ｙ］＝ｔｎ＾３を代入する（Ｓ１７５０）。そしてＢｏａｒｄ［ｘ］［ｙ］をグループ化して、配列Ｈ２［ｘ］［ｙ］に代入する（Ｓ１７６０）。次に配列Ｈ２のＥ空点を配列Ｅ２［ｘ］［ｙ］に代入する（Ｓ１７７０）。そして点（ｘ，ｙ）を配列Ｏｒｄｅｒ［ｉ］に追加し（配列Ｏｒｄｅｒ［ｉ］．ｘにｘを、配列Ｏｒｄｅｒ［ｉ］．ｙにｙを代入）、Ｏｒｄｅｒ［ｉ］．ｖに、４０００とＥ２［ｘ］［ｙ］＝１となる点の数を加算した値を代入する（Ｓ１７８０）。そしてＢｏａｒｄ［ｘ］［ｙ］＝０を代入する（Ｓ１７９０）。
【０３１４】
以上の処理をＥ１［ｘ］［ｙ］＝１となるすべての点（ｘ，ｙ）について行い、その処理終了後、処理Ｃ３を実行する。
【０３１５】
まず、配列Ｈ［ｘ］［ｙ］のＯ空点を配列Ｏ［ｘ］［ｙ］に代入する（Ｓ１８００）。そして配列Ｈ［ｘ］［ｙ］のＥ空点のＥ空点を配列ＥＥ［ｘ］［ｙ］に代入する（Ｓ１８１０）。次に配列Ｈ［ｘ］［ｙ］のＥ空点のＯ空点を配列ＥＯ［ｘ］［ｙ］に代入し（Ｓ１８２０）、配列Ｈ［ｘ］［ｙ］のＯ空点のＥ空点を配列ＯＥ［ｘ］［ｙ］に代入する（Ｓ１８３０）。
【０３１６】
そして点（ｘ，ｙ）について、それぞれ１から１９になるまで、Ｓ１８４０乃至Ｓ１９１０を反復処理する。
【０３１７】
まず配列Ｏ［ｘ］［ｙ］＝１であるかを判定し（Ｓ１８４０）、そうであるならば点（ｘ，ｙ）をＯｒｄｅｒ［ｉ］に追加して（配列Ｏｒｄｅｒ［ｉ］．ｘにｘを、配列Ｏｒｄｅｒ［ｉ］．ｙにｙを代入）、Ｏｒｄｅｒ［ｉ］．ｖ＝３０００を代入する（Ｓ１８５０）。そして次の点（ｘ，ｙ）の処理に移る。また、配列Ｏ［ｘ］［ｙ］＝１ではない場合には、配列ＥＥ［ｘ］［ｙ］＝１であるかを判定する（Ｓ１８６０）。
【０３１８】
配列ＥＥ［ｘ］［ｙ］＝１であるならば点（ｘ，ｙ）を配列Ｏｒｄｅｒ［ｉ］に追加して（配列Ｏｒｄｅｒ［ｉ］．ｘにｘを、配列Ｏｒｄｅｒ［ｉ］．ｙにｙを代入）、Ｏｒｄｅｒ［ｉ］．ｖ＝２０００を代入する（Ｓ１８７０）。そして次の点（ｘ，ｙ）の処理に移る。そうでないならば、配列ＥＯ［ｘ］［ｙ］＝１であるかを判定する（Ｓ１８８０）。
【０３１９】
配列ＥＯ［ｘ］［ｙ］＝１であるならば点（ｘ，ｙ）を配列Ｏｒｄｅｒ［ｉ］に追加して（配列Ｏｒｄｅｒ［ｉ］．ｘにｘを、配列Ｏｒｄｅｒ［ｉ］．ｙにｙを代入）、Ｏｒｄｅｒ［ｉ］．ｖ＝１０００を代入する（Ｓ１８９０）。そして次の点（ｘ，ｙ）の処理に移る。そうでないならば、配列ＯＥ［ｘ］［ｙ］＝１であるかを判定する（Ｓ１９００）。
【０３２０】
配列ＯＥ［ｘ］［ｙ］＝１であるならば点（ｘ，ｙ）を配列Ｏｒｄｅｒ［ｉ］に追加して（配列Ｏｒｄｅｒ［ｉ］．ｘにｘを、配列Ｏｒｄｅｒ［ｉ］．ｙにｙを代入）、Ｏｒｄｅｒ［ｉ］．ｖ＝０を代入する（Ｓ１９１０）。そして次の点（ｘ，ｙ）の処理に移る。またそうでない場合にも次の点（ｘ，ｙ）の処理に移る。
【０３２１】
以上の処理を点（ｘ，ｙ）がそれぞれ１９になるまで処理を実行し、処理終了後、配列Ｏｒｄｅｒ［ｉ］について、その要素ｖが大きい順に並べ替える（Ｓ１９２０）。そして、上述の処理Ｄを簡易判定処理部２２５が実行する。
【０３２２】
次に処理Ｅについて説明する。
【０３２３】
まず処理Ｅにおいては、配列Ｈ［ｘ］［ｙ］のＥ空点を配列Ｅ１［ｘ］［ｙ］に代入する（Ｓ１９５０）。そしてＥ１［ｘ］［ｙ］＝１となる点の数を判定し（Ｓ１９６０）、それが２であるならば、後述する処理Ｆを簡易判定処理部２２５は実行する（Ｓ１９７０）。また１であるならば、後述する処理Ｇを簡易判定処理部２２５は実行する（Ｓ１９８０）。そして処理Ｆ、処理Ｇが終了後、簡易判定処理部２２５は後述する処理Ｈを実行する（Ｓ１９９０）。
【０３２４】
まずＥ１［ｘ］［ｙ］＝１となる点の数が２であった場合に実行する処理Ｆについて説明する。
【０３２５】
処理Ｆでは、まず配列Ｈ［ｘ］［ｙ］の空点ではないＥ点を配列Ｅ２［ｘ］［ｙ］に代入する（Ｓ２０００）。そしてＥ２［ｘ］［ｙ］＝１となるすべての点（ｘ，ｙ）について、Ｓ２０１０乃至Ｓ２０５０を反復処理する。
【０３２６】
まず配列Ｂｏａｒｄ［ｘ］［ｙ］をグループ化し、配列Ｇ［ｘ］［ｙ］に代入する（Ｓ２０１０）。そして配列Ｇ［ｘ］［ｙ］のＥ空点を配列Ｇ２［ｘ］［ｙ］に代入する（Ｓ２０２０）。
【０３２７】
そして配列Ｇ２［ａ］［ｂ］＝１（１≦ａ，ｂ≦１９）となる点（ａ，ｂ）の数を判定し（Ｓ２０３０）、それが１であるならば、点（ａ，ｂ）を配列Ｏｒｄｅｒ［ｉ］に追加し（配列Ｏｒｄｅｒ［ｉ］．ｘにａを、配列Ｏｒｄｅｒ［ｉ］．ｙにｂを代入）、Ｏｒｄｅｒ［ｉ］．ｖ＝６０００を代入する（Ｓ２０４０）。一方、配列Ｇ２［ａ］［ｂ］＝１となる点の数が２の場合、点（ａ，ｂ）を配列Ｏｒｄｅｒ［ｉ］に追加し（配列Ｏｒｄｅｒ［ｉ］．ｘにａを、配列Ｏｒｄｅｒ［ｉ］．ｙにｂを代入）、Ｏｒｄｅｒ［ｉ］．ｖ＝５０００を代入する（Ｓ２０５０）。また配列Ｇ２［ａ］［ｂ］が１でも２でもない場合には、あるいはＳ２０４０、Ｓ２０５０において点（ａ，ｂ）を配列Ｏｒｄｅｒ［ｉ］に追加した場合には、次の点（ｘ，ｙ）の処理に移る。
【０３２８】
以上の処理をＥ２［ｘ］［ｙ］＝１となるすべての点（ｘ，ｙ）について実行し、処理終了後、処理Ｆ２を実行する。
【０３２９】
まず、配列Ｅ１［ｘ］［ｙ］＝１となるすべての点（ｘ，ｙ）について、Ｓ２０６０乃至Ｓ２１００の反復処理を実行する。
【０３３０】
まず、Ｂｏａｒｄ［ｘ］［ｙ］＝ｔｎ＾３を代入し（Ｓ２０６０）、次にＢｏａｒｄ［ｘ］［ｙ］をグループ化して、配列Ｈ２［ｘ］［ｙ］に代入する（Ｓ２０７０）。そして配列Ｈ２［ｘ］［ｙ］のＥ空点を配列Ｅ２［ｘ］［ｙ］に代入し（Ｓ２０８０）、点（ｘ，ｙ）を配列Ｏｒｄｅｒ［ｉ］に追加する（配列Ｏｒｄｅｒ［ｉ］．ｘにｘを、配列Ｏｒｄｅｒ［ｉ］．ｙにｙを代入）。そしてＯｒｄｅｒ［ｉ］．ｖについて、４０００と、配列Ｅ２［ｘ］［ｙ］＝１となる点の数とを加算した値を代入する（Ｓ２０９０）。そして、Ｂｏａｒｄ［ｘ］［ｙ］＝０を代入する（Ｓ２１００）。
【０３３１】
以上の処理をＥ１［ｘ］［ｙ］＝１となるすべての点（ｘ，ｙ）について実行し、処理終了後、処理Ｆ３を実行する。
【０３３２】
まず、配列Ｈ［ｘ］［ｙ］のＯ空点を配列Ｏ［ｘ］［ｙ］に代入する（Ｓ２１１０）。そして配列Ｈ［ｘ］［ｙ］のＥ空点のＥ空点を配列ＥＥ［ｘ］［ｙ］に代入する（Ｓ２１２０）。次に配列Ｈ［ｘ］［ｙ］のＥ空点のＯ空点を配列ＥＯ［ｘ］［ｙ］に代入し（Ｓ２１３０）、配列Ｈ［ｘ］［ｙ］のＯ空点のＥ空点を配列ＯＥ［ｘ］［ｙ］に代入する（Ｓ２１４０）。
【０３３３】
そして点（ｘ，ｙ）について、それぞれ１から１９になるまで、Ｓ２１５０乃至Ｓ２２２０を反復処理する。
【０３３４】
まず配列Ｏ［ｘ］［ｙ］＝１であるかを判定し（Ｓ２１５０）、そうであるならば点（ｘ，ｙ）をＯｒｄｅｒ［ｉ］に追加して（配列Ｏｒｄｅｒ［ｉ］．ｘにｘを、配列Ｏｒｄｅｒ［ｉ］．ｙにｙを代入）、Ｏｒｄｅｒ［ｉ］．ｖ＝３０００を代入する（Ｓ２１６０）。そして次の点（ｘ，ｙ）の処理に移る。また、配列Ｏ［ｘ］［ｙ］＝１ではない場合には、配列ＥＥ［ｘ］［ｙ］＝１であるかを判定する（Ｓ２１７０）。
【０３３５】
配列ＥＥ［ｘ］［ｙ］＝１であるならば点（ｘ，ｙ）を配列Ｏｒｄｅｒ［ｉ］に追加して（配列Ｏｒｄｅｒ［ｉ］．ｘにｘを、配列Ｏｒｄｅｒ［ｉ］．ｙにｙを代入）、Ｏｒｄｅｒ［ｉ］．ｖ＝２０００を代入する（Ｓ２１８０）。そして次の点（ｘ，ｙ）の処理に移る。そうでないならば、配列ＥＯ［ｘ］［ｙ］＝１であるかを判定する（Ｓ２１９０）。
【０３３６】
配列ＥＯ［ｘ］［ｙ］＝１であるならば点（ｘ，ｙ）を配列Ｏｒｄｅｒ［ｉ］に追加して（配列Ｏｒｄｅｒ［ｉ］．ｘにｘを、配列Ｏｒｄｅｒ［ｉ］．ｙにｙを代入）、Ｏｒｄｅｒ［ｉ］．ｖ＝１０００を代入する（Ｓ２２００）。そして次の点（ｘ，ｙ）の処理に移る。そうでないならば、配列ＯＥ［ｘ］［ｙ］＝１であるかを判定する（Ｓ２２１０）。
【０３３７】
配列ＯＥ［ｘ］［ｙ］＝１であるならば点（ｘ，ｙ）を配列Ｏｒｄｅｒ［ｉ］に追加して（配列Ｏｒｄｅｒ［ｉ］．ｘにｘを、配列Ｏｒｄｅｒ［ｉ］．ｙにｙを代入）、Ｏｒｄｅｒ［ｉ］．ｖ＝０を代入する（Ｓ２２２０）。そして次の点（ｘ，ｙ）の処理に移る。またそうでない場合にも次の点（ｘ，ｙ）の処理に移る。
【０３３８】
以上の処理を点（ｘ，ｙ）がそれぞれ１９になるまで処理を実行し、処理終了後、配列Ｏｒｄｅｒ［ｉ］について、その要素ｖが大きい順に並べ替える（Ｓ２２３０）。そして、後述する処理Ｈを簡易判定処理部２２５が実行する。
【０３３９】
また、図１１１のＳ１９６０において配列Ｅ１［ｘ］［ｙ］＝１となる点の数が１である場合には、処理Ｇが実行されるので、処理Ｇを説明する。
【０３４０】
簡易判定処理部２２５は、配列Ｈ［ｘ］［ｙ］の空点ではないＥ点について、配列Ｅ２［ｘ］［ｙ］に代入する（Ｓ２３００）。そして、Ｅ２［ｘ］［ｙ］＝１となるすべての点（ｘ，ｙ）について、Ｓ２３１０乃至Ｓ２３４０を反復処理する。
【０３４１】
すなわち、まず点（ｘ，ｙ）をグループ化し（配列Ｂｏａｒｄ［ｘ］［ｙ］をグループ化し）、配列Ｇ［ｘ］［ｙ］に代入する（Ｓ２３１０）。そして配列Ｇ［ｘ］［ｙ］のＥ空点を配列Ｇ２［ｘ］［ｙ］に代入する（Ｓ２３２０）。そして配列Ｇ２［ａ］［ｂ］＝１（１≦ａ，ｂ≦１９）となる点（ａ，ｂ）の数を判定し（Ｓ２３３０）、それが１点以外の場合には、次の点（ｘ，ｙ）に移る。一方、配列Ｇ２［ｘ］［ｙ］＝１となる点の数が１点の場合には点（ａ，ｂ）を配列Ｏｒｄｅｒ［ｉ］に追加し（配列Ｏｒｄｅｒ［ｉ］．ｘにａを、配列Ｏｒｄｅｒ［ｉ］．ｙにｂを代入）、Ｏｒｄｅｒ［ｉ］．ｖ＝５０００とする（Ｓ２３４０）。
【０３４２】
以上の処理をＥ２［ｘ］［ｙ］＝１となるすべての点（ｘ，ｙ）について行い、その処理終了後、処理Ｈを実行する。
【０３４３】
まず簡易判定処理部２２５は、ｉ＝０からｉ＜３６１になるまで、Ｓ２４００乃至Ｓ２４３０を反復処理する。
【０３４４】
すなわち、まず手番ｔｎ＾３で配列Ｏｒｄｅｒ［ｉ］の点（ｘ，ｙ）に着手可能かを判定し（Ｓ２４００）、着手不可能ならば次のｉの処理に移る。一方、着手可能ならば、着手を行い、配列Ｂｏａｒｄ［ｘ］［ｙ］、配列Ｈ［ｘ］［ｙ］を更新する（Ｓ２４０５）。すなわちＢｏａｒｄ［ｘ］［ｙ］＝ｔｎ＾３とし、さらに着手したことによって相手の石が取れる場合には、取れる石の位置における配列Ｂｏａｒｄの値についても適宜更新する。また判定対象の石と隣接している石についても配列Ｈ［ｘ］［ｙ］＝１として適宜更新する。さらにグループ化できる場合には、配列Ｈ［ｘ］［ｙ］を再グループ化する。その後、後述する処理Ａ（図１０５の処理）を実行し、処理Ａの判定結果が負けならば（Ｓ２４１０）、簡易判定処理部２２５は攻撃側の負けと判定し（Ｓ２４２０）、処理を終了する。一方、処理Ａの判定結果が負けでないならば次のｉの処理に移る。
【０３４５】
以上の処理をｉ＜３６１となるまで反復し、処理を終了した場合、簡易判定処理部２２５は攻撃側の勝ちと判定し（Ｓ２４３０）、処理を終了する。
【０３４６】
以上のように、簡易判定処理部２２５が処理Ａ乃至処理Ｈを実行することで、本実施例における、緩みシチョウを用いた死活判定処理を実行することが出来る。
【実施例５】
【０３４７】
なお上述の実施例１乃至実施例３では判定対象の石を用いた場合を説明したが、目標石を指定しても良い。この場合、死活判定処理部２１ｄは、総あたりによる死活判定処理を行う場合に、目標石のすべてが活きる場合、死活判定の結果は活きとなり、目標石の少なくとも一つの石が取られる場合、死活判定の結果は死にと判定することで、総あたりによる死活判定処理を実行することが出来る。
【０３４８】
また、上述の各実施例では配列、変数などを用いた処理を説明したが、それらに限定されず、適宜、必要な方法で処理を行うことが出来る。
【０３４９】
本発明に於ける各手段、データベースは、その機能が論理的に区別されているのみであって、物理上あるいは事実上は同一の領域を為していても良い。又データベースの代わりにデータファイルであっても良いことは言うまでもなく、データベースとの記載にはデータファイルをも含んでいる。
【産業上の利用可能性】
【０３５０】
上述の囲碁の死活判定システム１を用いることによって、対局中、終局時に限られず、また従来の死活判定システム１よりも高速に死活判定の結果を出力することが出来る。
【符号の説明】
【０３５１】
１：囲碁の死活判定システム
２：サーバ
３：対局者端末
１０：演算装置
１１：記憶装置
１２：表示装置
１３：入力装置
１４：通信装置
２０：入力受付部
２１：死活判定処理部
２１ａ、２１ｂ、２１ｃ、２１ｄ：死活判定処理部
２２：出力処理部
２１０：初期判定処理部
２１１：第１判定処理部
２１２：第２判定処理部
２１３：優先度変更処理部
２１４：死活判定実行部
２１５：優先度記憶部
２１６：第１外部処理部
２１７：第２外部処理部
２１８：死活判定実行部
２１９：領域分割処理部
２２０：０眼変形処理部
２２１：後手１眼変形処理部
２２２：１眼変形処理部
２２３：死活判定実行部
２２４：Ｅ空点カウント処理部
２２５：簡易判定処理部
【図１】
0005411025.tif 000002
【図２】
0005411025.tif 000003
【図３】
0005411025.tif 000004
【図４】
0005411025.tif 000005
【図５】
0005411025.tif 000006
【図６】
0005411025.tif 000007
【図７】
0005411025.tif 000008
【図８】
0005411025.tif 000009
【図９】
0005411025.tif 000010
【図１０】
0005411025.tif 000011
【図１１】
0005411025.tif 000012
【図１２】
0005411025.tif 000013
【図１３】
0005411025.tif 000014
【図１４】
0005411025.tif 000015
【図１５】
0005411025.tif 000016
【図１６】
0005411025.tif 000017
【図１７】
0005411025.tif 000018
【図１８】
0005411025.tif 000019
【図１９】
0005411025.tif 000020
【図２０】
0005411025.tif 000021
【図２１】
0005411025.tif 000022
【図２２】
0005411025.tif 000023
【図２３】
0005411025.tif 000024
【図２４】
0005411025.tif 000025
【図２５】
0005411025.tif 000026
【図２６】
0005411025.tif 000027
【図２７】
0005411025.tif 000028
【図２８】
0005411025.tif 000029
【図２９】
0005411025.tif 000030
【図３０】
0005411025.tif 000031
【図３１】
0005411025.tif 000032
【図３２】
0005411025.tif 000033
【図３３】
0005411025.tif 000034
【図３４】
0005411025.tif 000035
【図３５】
0005411025.tif 000036
【図３６】
0005411025.tif 000037
【図３７】
0005411025.tif 000038
【図３８】
0005411025.tif 000039
【図３９】
0005411025.tif 000040
【図４０】
0005411025.tif 000041
【図４１】
0005411025.tif 000042
【図４２】
0005411025.tif 000043
【図４３】
0005411025.tif 000044
【図４４】
0005411025.tif 000045
【図４５】
0005411025.tif 000046
【図４６】
0005411025.tif 000047
【図４７】
0005411025.tif 000048
【図４８】
0005411025.tif 000049
【図４９】
0005411025.tif 000050
【図５０】
0005411025.tif 000051
【図５１】
0005411025.tif 000052
【図５２】
0005411025.tif 000053
【図５３】
0005411025.tif 000054
【図５４】
0005411025.tif 000055
【図５５】
0005411025.tif 000056
【図５６】
0005411025.tif 000057
【図５７】
0005411025.tif 000058
【図５８】
0005411025.tif 000059
【図５９】
0005411025.tif 000060
【図６０】
0005411025.tif 000061
【図６１】
0005411025.tif 000062
【図６２】
0005411025.tif 000063
【図６３】
0005411025.tif 000064
【図６４】
0005411025.tif 000065
【図６５】
0005411025.tif 000066
【図６６】
0005411025.tif 000067
【図６７】
0005411025.tif 000068
【図６８】
0005411025.tif 000069
【図６９】
0005411025.tif 000070
【図７０】
0005411025.tif 000071
【図７１】
0005411025.tif 000072
【図７２】
0005411025.tif 000073
【図７３】
0005411025.tif 000074
【図７４】
0005411025.tif 000075
【図７５】
0005411025.tif 000076
【図７６】
0005411025.tif 000077
【図７７】
0005411025.tif 000078
【図７８】
0005411025.tif 000079
【図７９】
0005411025.tif 000080
【図８０】
0005411025.tif 000081
【図８１】
0005411025.tif 000082
【図８２】
0005411025.tif 000083
【図８３】
0005411025.tif 000084
【図８４】
0005411025.tif 000085
【図８５】
0005411025.tif 000086
【図８６】
0005411025.tif 000087
【図８７】
0005411025.tif 000088
【図８８】
0005411025.tif 000089
【図８９】
0005411025.tif 000090
【図９０】
0005411025.tif 000091
【図９１】
0005411025.tif 000092
【図９２】
0005411025.tif 000093
【図９３】
0005411025.tif 000094
【図９４】
0005411025.tif 000095
【図９５】
0005411025.tif 000096
【図９６】
0005411025.tif 000097
【図９７】
0005411025.tif 000098
【図９８】
0005411025.tif 000099
【図９９】
0005411025.tif 000100
【図１００】
0005411025.tif 000101
【図１０１】
0005411025.tif 000102
【図１０２】
0005411025.tif 000103
【図１０３】
0005411025.tif 000104
【図１０４】
0005411025.tif 000105
【図１０５】
0005411025.tif 000106
【図１０６】
0005411025.tif 000107
【図１０７】
0005411025.tif 000108
【図１０８】
0005411025.tif 000109
【図１０９】
0005411025.tif 000110
【図１１０】
0005411025.tif 000111
【図１１１】
0005411025.tif 000112
【図１１２】
0005411025.tif 000113
【図１１３】
0005411025.tif 000114
【図１１４】
0005411025.tif 000115
【図１１５】
0005411025.tif 000116
【図１１６】
0005411025.tif 000117