using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;namespace testsd
{
class Program
{
static void Main(string[] args)
{
int i = 9, j = 9;
int[,] arr = new int[i, j];
Console.Write("输入原始数独数字" + "\n");
int m = 1, n = 1;
bool result = true;
bool test = true;
ID:
while (result == true)
{
//控制台输入行数
Console.WriteLine("输入数独对应行数"); string input1 = Console.ReadLine();
m = Convert.ToInt32(input1); //将输入转换成行数
//Console.WriteLine(input1); //控制台输入列数
Console.WriteLine("输入数独对应列数"); string input2 = Console.ReadLine();
n = Convert.ToInt32(input2); //将输入转换成列数
// Console.WriteLine(input2); //控制台输入对应数值
Console.WriteLine("输入数独对应数值"); string input = Console.ReadLine(); //控制台输入一个整数
int data = Convert.ToInt32(input); //将输入转换成整数
arr[m - 1, n - 1] = data;
//Console.WriteLine(data);
//判断是否输入下一个数值yes或no或输入错误
while (test == true)
{
//控制台选择输入下一个数值 Console.WriteLine("选择是否输入下一个数值"); string input3 = Console.ReadLine();
Console.Write(input3); if (input3 == "yes")
{
Console.WriteLine("输入下一个数值");
goto ID;
}
else if (input3 == "no")
{
result = false;
Console.WriteLine("进行下一步");
test = false;
}
else
{
Console.WriteLine("输入错误,请重新输入"); }
}
} // Console.WriteLine("显示二维数组"); //显示生成的二位数组数据的数值
for (int m1 = 0; m1 < 9; m1++)
{
for (int n1 = 0; n1 < 9; n1++)
{
Console.Write(arr[m1, n1] + "");
}
Console.WriteLine();
}
Console.WriteLine("所输入的二维数组");
Console.ReadLine(); //数独执行添加条件 //数独执行添加条件
int h = 0, k = 0;
ID1: for (h = 0; h < 9; h++)
{
for (k = 0; k < 9; k++)
{
if (arr[h, k] != 0) { continue; }
else
{ for (int g = 1; g <= 10; g++)
{
arr[h, k] = g;
bool test1 = true;
while (test1 == true) //检测数值是否符合数独规则
{ int num = arr[h, k];
int[] query = new int[9] { 0, 0, 0, 3, 3, 3, 6, 6, 6 };
int t, u;
//每一行每一列是否重复
bool result1 = true;
while (result1 == true)
{
for (t = 0; t < 9; t++)
{
if ((t != h && arr[t, k] == num) || (t != k && arr[h, t] == num))
result1 = false;
}
//每个九宫格是否重复
for (t = query[h]; t < query[h] + 3; t++)
{
for (u = query[k]; u < query[k] + 3; u++)
{
if ((t != h || u != k) && arr[t, u] == num)
result1 = false;
}
}
}
test1 = false; }
}
//判断数值是否完成填写,如果没有恢复数值为0重新操作;
bool tet = true;
while (tet == true)
{
if (arr[h, k] >= 10) arr[h, k] = 0;
else { tet = false; }
}
}
} } //检测数组是否为0;
bool ch = true;
while (ch == true)
{
if (arr[h, k] == 0) goto ID1;
else
{
continue;
} } //显示计算生成的二位数组数据的数值
for (int m1 = 0; m1 < 9; m1++)
{
for (int n1 = 0; n1 < 9; n1++)
{
Console.Write(arr[m1, n1] + "");
}
Console.WriteLine();
}
Console.WriteLine("计算生成的二维数组");
Console.ReadLine(); }
}
}实现功能:
1:自动录入随机数独的所对应行列数值;
2:显示录入的数独;
3:根据数独规则生成未录入行列的数值;
目前1,2功能实现,3功能没整出来。大侠们帮忙看下上面的问题呢!
using System.Collections.Generic;
using System.Linq;
using System.Text;namespace testsd
{
class Program
{
static void Main(string[] args)
{
int i = 9, j = 9;
int[,] arr = new int[i, j];
Console.Write("输入原始数独数字" + "\n");
int m = 1, n = 1;
bool result = true;
bool test = true;
ID:
while (result == true)
{
//控制台输入行数
Console.WriteLine("输入数独对应行数"); string input1 = Console.ReadLine();
m = Convert.ToInt32(input1); //将输入转换成行数
//Console.WriteLine(input1); //控制台输入列数
Console.WriteLine("输入数独对应列数"); string input2 = Console.ReadLine();
n = Convert.ToInt32(input2); //将输入转换成列数
// Console.WriteLine(input2); //控制台输入对应数值
Console.WriteLine("输入数独对应数值"); string input = Console.ReadLine(); //控制台输入一个整数
int data = Convert.ToInt32(input); //将输入转换成整数
arr[m - 1, n - 1] = data;
//Console.WriteLine(data);
//判断是否输入下一个数值yes或no或输入错误
while (test == true)
{
//控制台选择输入下一个数值 Console.WriteLine("选择是否输入下一个数值"); string input3 = Console.ReadLine();
Console.Write(input3); if (input3 == "yes")
{
Console.WriteLine("输入下一个数值");
goto ID;
}
else if (input3 == "no")
{
result = false;
Console.WriteLine("进行下一步");
test = false;
}
else
{
Console.WriteLine("输入错误,请重新输入"); }
}
} // Console.WriteLine("显示二维数组"); //显示生成的二位数组数据的数值
for (int m1 = 0; m1 < 9; m1++)
{
for (int n1 = 0; n1 < 9; n1++)
{
Console.Write(arr[m1, n1] + "");
}
Console.WriteLine();
}
Console.WriteLine("所输入的二维数组");
Console.ReadLine(); //数独执行添加条件 //数独执行添加条件
int h = 0, k = 0;
ID1: for (h = 0; h < 9; h++)
{
for (k = 0; k < 9; k++)
{
if (arr[h, k] != 0) { continue; }
else
{ for (int g = 1; g <= 10; g++)
{
arr[h, k] = g;
bool test1 = true;
while (test1 == true) //检测数值是否符合数独规则
{ int num = arr[h, k];
int[] query = new int[9] { 0, 0, 0, 3, 3, 3, 6, 6, 6 };
int t, u;
//每一行每一列是否重复
bool result1 = true;
while (result1 == true)
{
for (t = 0; t < 9; t++)
{
if ((t != h && arr[t, k] == num) || (t != k && arr[h, t] == num))
result1 = false;
}
//每个九宫格是否重复
for (t = query[h]; t < query[h] + 3; t++)
{
for (u = query[k]; u < query[k] + 3; u++)
{
if ((t != h || u != k) && arr[t, u] == num)
result1 = false;
}
}
}
test1 = false; }
}
//判断数值是否完成填写,如果没有恢复数值为0重新操作;
bool tet = true;
while (tet == true)
{
if (arr[h, k] >= 10) arr[h, k] = 0;
else { tet = false; }
}
}
} } //检测数组是否为0;
bool ch = true;
while (ch == true)
{
if (arr[h, k] == 0) goto ID1;
else
{
continue;
} } //显示计算生成的二位数组数据的数值
for (int m1 = 0; m1 < 9; m1++)
{
for (int n1 = 0; n1 < 9; n1++)
{
Console.Write(arr[m1, n1] + "");
}
Console.WriteLine();
}
Console.WriteLine("计算生成的二维数组");
Console.ReadLine(); }
}
}实现功能:
1:自动录入随机数独的所对应行列数值;
2:显示录入的数独;
3:根据数独规则生成未录入行列的数值;
目前1,2功能实现,3功能没整出来。大侠们帮忙看下上面的问题呢!
static int[,] pu = new int[9, 9]; static void Main(string[] args)
{
int m=1,n=1;
bool result = true;
while (result == true)
{
//控制台输入行数
Console.WriteLine("输入数独对应行数");
string input1 = Console.ReadLine();
m = Convert.ToInt32(input1); //将输入转换成行数
//控制台输入列数
Console.WriteLine("输入数独对应列数");
string input2 = Console.ReadLine();
n = Convert.ToInt32(input2); //将输入转换成列数 //控制台输入对应数值
Console.WriteLine("输入数独对应数值");
string input = Console.ReadLine(); //控制台输入一个整数
int data = Convert.ToInt32(input); //将输入转换成整数
pu[m - 1, n - 1] = data;
//判断是否输入下一个数值yes或no或输入错误
bool test = true;
while (test == true)
{
//控制台选择输入下一个数值
Console.WriteLine("选择是否输入下一个数值");
string input3 = Console.ReadLine(); if (input3 == "yes")
{
Console.WriteLine("输入下一个数值");
test=false;
break;
}
else if (input3 == "no")
{
result = false;
Console.WriteLine("进行下一步");
test = false;
break;
}
else
{
Console.WriteLine("输入错误,请重新输入");
}
}
}
Show();
GetAnswer(0);
Console.ReadLine();
}
/// 验证函数
static bool IsValid(int i, int j)
{
int n = pu[i, j];
int[] query = new int[9] { 0, 0, 0, 3, 3, 3, 6, 6, 6 };
int t, u; //每一行每一列是否重复 for (t = 0; t < 9; t++)
{
if ((t != i && pu[t, j] == n) || (t != j && pu[i, t] == n))
return false;
}
//每个九宫格是否重复 for (t = query[i]; t < query[i] + 3; t++)
{
for (u = query[j]; u < query[j] + 3; u++)
{
if ((t != i || u != j) && pu[t, u] == n)
return false;
}
}
return true;
}
/// 显示函数
static void Show()
{
for (var i = 0; i < 9; i++)
{
for (var j = 0; j < 9; j++)
{
Console.Write(pu[i, j] + " ");
}
Console.WriteLine();
}
Console.WriteLine("----------------------------------------------");
} /// 使用回溯算法求解
static void GetAnswer(int n)
{
if (n == 81)
{//是否已经是最后一个格子
Show();
return;
}
int i = n / 9, j = n % 9;
if (pu[i, j] != 0)
{//如果当前格子不需要填数字,就跳到下一个格子
GetAnswer(n + 1);
return;
}
for (int k = 0; k < 9; k++)
{
pu[i, j]++;//当前格子进行尝试所有解
if (IsValid(i, j))
GetAnswer(n + 1);//验证通过,就继续下一个
}
pu[i, j] = 0; //如果上面的单元无解,还原,就回溯
return;
} 挂了N久没人理会,郁闷。还得自己网上找的参考做的。