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; } } }
相关文章推荐
- C#做的接口
- C#使用IrisSkin2.dll美化WinForm程序界面
- c# 软件更新实例
- c# 软件更新实例
- Ubuntu vsftp搭建和C# Winform FTP操作
- C# socket
- 【C#】第1章 VS2015中C#6的新特性
- C#中怎样实现序列化和反序列化
- c#soap调用WebService
- C#编写ActiveX网页截图控件
- C#做园区规划设计论坛服务系统笔记
- C#多线程编程总结
- C#Winform动态调整FlowLayoutPanel的控件中位置
- 装箱与拆箱C#(三)之避免拆箱
- 深入理解C#中new、override、virtual关键字的区别
- C# internal
- C#发送邮件
- C#中的Linq to Xml详解
- C#中Abstract和Virtual
- C#开发ActiveX网页截图控件