将1~N*N放入一个N*N的矩阵,要求矩阵每行每列以及对角线的和相等。请问怎么实现?注意一定要用link实现。
1条回答 默认 最新
- threenewbee 2015-01-13 06:51关注
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace ConsoleApplication2 { class Program { static void Main(string[] args) { int n = 3; var result = solve(n, new int[] { }).First(); for (int i = 0; i < n; i++) { Console.WriteLine(string.Join("\t", result.Skip(i * n).Take(n).Select(x => x.ToString()))); } } static IEnumerable<int[]> solve(int n, int[] current) { if (current.Length == n * n) { yield return current; yield break; } foreach (int item in Enumerable.Range(1, n * n).Where(x => !current.Contains(x) && foo(n, current, x))) { foreach (var i in solve(n, current.Concat(new int[] { item }).ToArray())) yield return i; } } static bool foo(int n, int[] current, int next) { int[] arr = current.Concat(new int[] { next }).Concat(Enumerable.Repeat(0, n * n - current.Length - 1)).ToArray(); int sum3 = 0, sum4 = 0; for (int i = 0; i < n; i++) { int sum1 = 0, sum2 = 0; for (int j = 0; j < n; j++) { sum1 += arr[i * n + j]; sum2 += arr[j * n + i]; } if (new int[] { sum1, sum2 }.Any(x => x > n * n / 2 + 1)) return false; sum3 += arr[i * n + i]; sum4 += arr[i * n + (n - i)]; } if (new int[] { sum3, sum4 }.Any(x => x > n * n / 2 + 1)) return false; return true; } } }
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报
悬赏问题
- ¥15 nginx反向代理获取ip,java获取真实ip
- ¥15 eda:门禁系统设计
- ¥50 如何使用js去调用vscode-js-debugger的方法去调试网页
- ¥15 376.1电表主站通信协议下发指令全被否认问题
- ¥15 物体双站RCS和其组成阵列后的双站RCS关系验证
- ¥15 复杂网络,变滞后传递熵,FDA
- ¥20 csv格式数据集预处理及模型选择
- ¥15 部分网页页面无法显示!
- ¥15 怎样解决power bi 中设置管理聚合,详细信息表和详细信息列显示灰色,而不能选择相应的内容呢?
- ¥15 QTOF MSE数据分析