📄 mainform.cs
字号:
Clear();
if (grid.Length != gridSize * gridSize) return;
for (int i = 0; i < gridSize; i++)
for (int j = 0; j < gridSize; j++)
{
if (grid[i * gridSize + j] == '.') continue;
SetButton(graphicSudokuBoard[i, j], grid[i * gridSize + j]);
}
}
private void GenGridButton_Click(object sender, EventArgs e)
{
string grid = "";
switch (gridSize)
{
case 4:
if (level == Level.Easy)
{
Random r = new Random();
int i = r.Next(Easygrid4x4.Length);
grid = Easygrid4x4[i];
m_currentGrid = i;
groupBox1.Text = i.ToString();
}
if (level == Level.Medium)
{
Random r = new Random();
int i = r.Next(Mediumgrid4x4.Length);
grid = Mediumgrid4x4[i];
m_currentGrid = (30 + i);
groupBox1.Text = "Puzzle Number " + (30 + i).ToString();
}
if (level == Level.Hard)
{
Random r = new Random();
int i = r.Next(Hardgrid4x4.Length);
grid = Hardgrid4x4[i];
m_currentGrid = (60 + i);
groupBox1.Text = "Puzzle Number " + (60 + i).ToString();
}
genGrid(grid);
break;
case 9:
if (level == Level.Easy)
{
Random r = new Random();
int i = r.Next(Easygrid9x9.Length);
grid = Easygrid9x9[i];
m_currentGrid = (90 + i);
groupBox1.Text = "Puzzle Number " + (90 + i).ToString();
}
if (level== Level.Medium)
{
Random r = new Random();
int i = r.Next(Mediumgrid9x9.Length);
grid = Mediumgrid9x9[i];
m_currentGrid = (120 + i);
groupBox1.Text = "Puzzle Number " + (120 + i).ToString();
}
if (level == Level.Hard)
{
Random r = new Random();
int i = r.Next(Hardgrid9x9.Length);
grid = Hardgrid9x9[i];
m_currentGrid = (150 + i);
groupBox1.Text = "Puzzle Number " + (150 + i).ToString();
}
genGrid(grid);
break;
case 16:
if (level == Level.Easy)
{
Random r = new Random();
int i = r.Next(Easygrid16x16.Length);
grid =Easygrid16x16[i];
m_currentGrid = (180 + i);
groupBox1.Text = "Puzzle Number " + (180 + i).ToString();
}
if (level== Level.Medium)
{
Random r = new Random();
int i = r.Next(Mediumgrid16x16.Length);
grid = Mediumgrid16x16[i];
m_currentGrid = (210 + i);
groupBox1.Text = "Puzzle Number " + (210 + i).ToString();
}
if (level == Level.Hard)
{
Random r = new Random();
int i = r.Next(Hardgrid16x16.Length);
grid = Hardgrid16x16[i];
m_currentGrid = (240 + i);
groupBox1.Text = "Puzzle Number " + (240 + i).ToString();
}
genGrid(grid);
break;
case 25:
if (level == Level.Easy)
{
Random r = new Random();
int i = r.Next(Easygrid25X25.Length);
grid = Easygrid25X25[i];
m_currentGrid = (270 + i);
groupBox1.Text = "Puzzle Number " + (270 + i).ToString();
}
if (level == Level.Medium)
{
Random r = new Random();
int i = r.Next(Mediumgrid25x25.Length);
grid = Mediumgrid25x25[i];
m_currentGrid = (300 + i);
groupBox1.Text = "Puzzle Number " + (300 + i).ToString();
}
if (level == Level.Hard)
{
Random r = new Random();
int i = r.Next(Hardgrid25x25.Length);
grid = Hardgrid25x25[i];
m_currentGrid = (330 + i);
groupBox1.Text = "Puzzle Number " + (330 + i).ToString();
}
genGrid(grid);
break;
default:
break;
}
}
private void aboutToolStripMenuItem_Click(object sender, EventArgs e)
{
About ab = new About();
ab.ShowDialog();
}
private void exitToolStripMenuItem_Click(object sender, EventArgs e)
{
Close();
}
string GetGridString()
{
string result = "";
for (int i = 0; i < gridSize; i++)
for (int j = 0; j < gridSize; j++)
if (graphicSudokuBoard[i, j].Text.Length > 0)
result += graphicSudokuBoard[i, j].Text;
else
result += '.';
return result;
}
bool enable = true;
void SetResult(MyCell[,] result)
{
if (result != null)
{
for (int i = 0; i < gridSize; i++)
for (int j = 0; j < gridSize; j++)
{
graphicSudokuBoard[i, j].Text = result[i, j].Value;
enable = false;
}
}
else
{
MessageBox.Show("A Conflict Found. Cannot solve this puzzel.", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
delegate string solve_string(string grid);
delegate MyCell[,] solve(string grid);
bool[] finished = { false, false, false };
void FillTimoutCombo()
{
TimeSpan duration;
for (int i = 1; i < 10; i++)
{
duration = TimeSpan.FromMilliseconds(100 * i);
timoutCombo.Items.Add(duration.TotalMilliseconds.ToString() + "ms");
}
for (int i = 1; i < 60; i++)
{
duration = TimeSpan.FromSeconds( i);
timoutCombo.Items.Add(duration.TotalSeconds.ToString() + "s");
}
for (int i = 1; i < 16; i++)
{
duration = TimeSpan.FromMinutes(i);
timoutCombo.Items.Add(duration.TotalMinutes.ToString() + "min");
}
timoutCombo.SelectedItem = "30s";
}
private int timeout=30000;
GraphData data;
StartingInfo startinfo;
MyCell[,] m_currentSolution;
MySolver cursolver = null;
void Solve()
{
finish = false;
MySolver solver = new MySolver(gridSize, startinfo);
m_currentSolution = solver.Solve(GetGridString());
cursolver = solver;
finish = true;
}
bool finish = false;
private void SolveButton_Click(object sender, EventArgs e)
{
data = new GraphData();
for (int k = 0; k < ValList.CheckedItems.Count; k++)
for (int j = 0; j < VarList.CheckedItems.Count; j++)
for (int i = 0; i < ConPropList.CheckedItems.Count; i++)
{
startinfo=new StartingInfo();
if (ConPropList.CheckedItems[i].ToString()!="None.")
{
startinfo.isFC=true;
if (ConPropList.CheckedItems[i].ToString()!="FC")
{
startinfo.isAC =true;
}
}
if (VarList.CheckedItems[j].ToString() == "Min Remeining Values")
startinfo.isMRV=true;
else
if (VarList.CheckedItems[j].ToString() == "MRV+MD")
startinfo.isMRV_MD=true;
if (ValList.CheckedItems[k].ToString() == "Least Constraint Value")
startinfo.isLCV=true;
ThreadStart ss = new ThreadStart(Solve);
Thread thread = new Thread(ss);
LogText.Text += "Starting ConProp : " + ConPropList.CheckedItems[i].ToString() + ". Var Heuristics : " + VarList.CheckedItems[j].ToString() + ". Val Heuristics : " + ValList.CheckedItems[k].ToString() + "...\n";
thread.Start();
thread.Join(timeout);
thread.Abort();
if (finish)
{
LogText.Text += "Finish in " + cursolver.Duration.TotalMilliseconds.ToString() + "ms . Backtracks : " + cursolver.NumOfBacktracking.ToString() + ".\n";
LogText.Select(LogText.Text.Length, 0);
LogText.ScrollToCaret();
data.Add("[ " + (ConPropList.Items.IndexOf(ConPropList.CheckedItems[i]) + 9 * ValList.Items.IndexOf(ValList.CheckedItems[k]) + 3 * VarList.Items.IndexOf(VarList.CheckedItems[j])).ToString() + " ]", cursolver.Duration.TotalMilliseconds, cursolver.NumOfBacktracking);
}
else
{
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -