您的位置:首页 > 编程语言 > C#

C#实现数独计算器

2016-06-13 00:00 453 查看
摘要: 使用Linq和递归实现数独计算

class Program
{
static Dictionary<int, int> list = new Dictionary<int, int>();
static void Main(string[] args)
{
for (int i = 0; i < 81; i++)
{
list.Add(i, 0);
}
list[0] = 5;
list[2] = 9;
Calc(0);
Show(list);
}

static bool Validate(int key, int value)
{
int x = key / 9;
int y = key % 9;

return !list.Where(e => (e.Key / 9) == x || (e.Key % 9) == y || ((e.Key % 9) / 3 == y / 3)
&& ((e.Key / 9) / 3 == x / 3)).Select(e => e.Value).Contains(value);
}

static void Show(IEnumerable<KeyValuePair<int, int>> list)
{
foreach (var item in list)
{
int x = item.Key / 9 + 1;
int y = item.Key % 9 + 1;

if (item.Key % 9 == 0)
Console.WriteLine();
Console.Write(item.Value + " ");
}
Console.WriteLine();
}

static bool Calc(int key)
{
if (key == 81)
{
return true;
}
if (list[key] != 0)
{
return Calc(key + 1);
}
else
{
for (int i = 1; i <= 9; i++)
{

if (Validate(key, i))
{
list[key] = i;
Console.WriteLine(key + " -> " + i);
if (Calc(key + 1))
{
return true;
}
else
{
list[key] = 0;
}
}
}
return false;
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: