一筆書きパズルの正誤判定

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
fio

一筆書きパズルの正誤判定

#1

投稿記事 by fio » 13年前

初めまして。

今、一筆書きパズルゲームを制作中なんですが、例えば星図形の一番上頂点から時計回りに、1,2,3,4,5と番号を割り振った時

1番から3,4番に線は引けるが、2,5番に線は引けない。
2番から4,5番に線は引けるが、1,3番に線は引けない。

といった感じの、線を引けるか?の判定をどのようにすればいいかが分かりません。
点の数が少なければ線引きパターンを全て出し、正誤判定を付けられるのですが、複雑な図形や、問題数が増えてくるとパターンを全て出すのにとても時間がかかってしまうので、
どうにか自動的に正誤判定を出すアルゴリズムを考えているのですが、なかなか上手くいきません。

やはり図形ごとに、パターンを全て出す必要があるのでしょうか?

ISLe
記事: 2650
登録日時: 14年前
連絡を取る:

Re: 一筆書きパズルの正誤判定

#2

投稿記事 by ISLe » 13年前

一筆書きができても五芒星じゃないと正解にならないのでしょうか。
その場合、五芒星じゃないと正解にならないように出題されるわけですよね。
その条件を使って判定すれば良いのでは?

アバター
a5ua
記事: 199
登録日時: 14年前

Re: 一筆書きパズルの正誤判定

#3

投稿記事 by a5ua » 13年前

2つの整数の組を使って辺を表現するというのはどうでしょうか。

頂点Xと頂点Yをつなぐ辺を(X, Y)と表すことにします。
これだけでは、(1, 3)と(3, 1)など同じ辺なのに違う表現が出てしまうので、、
ここでは、左側の数字のほうが小さくなるように定めることで重複をなくします。

fioさんが例示した星図形を取り上げると、
すべての辺のリストは、以下の5本の辺から成ります。
(1, 3)
(1, 4)
(2, 4)
(2, 5)
(3, 5)

E を図形を表す全ての辺のリストとするとき、
XからYへの線が引けるかを判定するアルゴリズムは以下のようになります。

(1) Y < X なら、XとYを入れ替える。
(2) E に (X, Y) が存在するか調べる。
(3) 存在すれば線は引けるが、存在しなければ線は引けない。

このアルゴリズムを使って、線を引くごとに、チェックしていけば、最終的な正誤判定も出来るかと思います。

fio

Re: 一筆書きパズルの正誤判定

#4

投稿記事 by fio » 13年前

>あれで一筆書きができても五芒星じゃないと正解にならないのでしょうか。
>その場合、五芒星じゃないと正解にならないように出題されるわけですよね。

説明不足ですみませんでした;;
五芒星の図形が出てきたら、点を全部結び、五芒星の図形では無かったら不正解といった感じですね。


>すべての辺のリストは、以下の5本の辺から成ります。
>(1, 3)
>(1, 4)
>(2, 4)
>(2, 5)
>(3, 5)

>E を図形を表す全ての辺のリストとするとき、
>XからYへの線が引けるかを判定するアルゴリズムは以下のようになります。

>(1) Y < X なら、XとYを入れ替える。
>(2) E に (X, Y) が存在するか調べる。
>(3) 存在すれば線は引けるが、存在しなければ線は引けない。

なるほど...! (1)のことが思いつかなくて、パターンが余計に多くなっていましたorz

回答してくださった方々、ありがとうございました!

ISLe
記事: 2650
登録日時: 14年前
連絡を取る:

Re: 一筆書きパズルの正誤判定

#5

投稿記事 by ISLe » 13年前

五角形を一筆書きすることもできるわけですが、五角形では不正解になる理由が分かりませんでした。
隣り合う頂点の間に壁があるとかいうふうに出題されるのであれば壁と交差する線は引けないようにするとかできると思ったんです。
一筆書きできるかどうかだけならそもそも正解の線の組み合わせを覚えておく必要はないんですよね。

一筆書きできるかどうかは入り口で、正解の図形を見付けるのが目的のゲームなんですかね。

(追記)
勘違いしてたみたい。
図形は最初から表示される仕様で、線(頂点の組み合わせ)データはもとから持ってて、判定方法だけ分からなかったということか。

閉鎖

“C言語何でも質問掲示板” へ戻る