/**************************************************/
/*★ ペグソリティアの答えを見つける 前田 稔 ★*/
/**************************************************/
using System;
class Prog
{
static string[] st =
{ "*********", //0
"***+++***", //1
"***+++***", //2
"*+++++++*", //3
"*+++ +++*", //4
"*+++++++*", //5
"***+++***", //6
"***+++***", //7
"*********" //8
};
/*
static string[] st =
{ "*********", //0
"*** ***", //1
"*** + ***", //2
"* +++ *", //3
"* + *", //4
"* + *", //5
"*** ***", //6
"*** ***", //7
"*********" //8
};
static string[] st =
{ "*********", //0
"*** ***", //1
"*** + ***", //2
"* + *", //3
"* + *", //4
"* ++ *", //5
"*** ***", //6
"*** ***", //7
"*********" //8
};
*/
static char[,] tbl = new char[9,9];
// 検索の方向(上,下,左,右)
static int[] yd = { -1, 1, 0, 0 };
static int[] xd = { 0, 0, -1, 1 };
//★Main() 関数
public static void Main()
{
int x,y;
//string[] st を char[,] t に格納
for (y = 0; y < 9; y++)
for (x = 0; x < 9; x++) tbl[y, x] = st[y][x];
//最初の状態を表示
disp(tbl);
//答えを見つける
srh(tbl);
Console.WriteLine("終了しました");
Console.ReadLine();
}
// 現在の状態を表示
public static void disp(char[,] t)
{
int x,y;
for (y = 0; y < 9; y++)
{
for (x = 0; x < 9; x++) Console.Write("{0}", t[y, x]);
Console.WriteLine("");
}
}
// ペグのカウント&状態をコピー
public static bool copy(char[,] t, char[,] tt)
{ int y, x, c;
c = 0;
for (y = 0; y < 9; y++)
for (x = 0; x < 9; x++)
{ if (tt[y, x]=='+') c++;
t[y, x] = tt[y, x];
}
if (c == 1) return true;
return false;
}
// 再起でペグの手を検索
static bool srh(char[,] tt)
{
char[,] t = new char[9,9];
int y, x, i;
int y1, y2, x1, x2;
//disp(tt); Console.ReadLine();
// ペグのカウント&状態をコピー
if (copy(t,tt))
{
Console.WriteLine("★OK");
disp(tt);
return true;
}
// 全てのペグをサーチ
for (y = 1; y < 8; y++)
{
for (x = 1; x < 8; x++)
{
if (t[y, x] == '+')
{ //上下左右を調べる
for (i = 0; i < 4; i++)
{
y1 = y + yd[i];
y2 = y1 + yd[i];
x1 = x + xd[i];
x2 = x1 + xd[i];
if (t[y1, x1] == '+' && t[y2, x2] == ' ')
{
t[y, x] = ' ';
t[y1, x1] = ' ';
t[y2, x2] = '+';
if (srh(t))
{
disp(tt);
return true;
}
t[y, x] = '+';
t[y1, x1] = '+';
t[y2, x2] = ' ';
}
}
}
}
}
return false;
}
}
|