2013-07-30 28 views
0

我用C++创建了一个数独求解器。不过,我需要一个GUI。由于我不熟悉VC++,因此我无法使用它创建一个GUI,并使用c#创建它。我已经通过了C#的基础知识,但需要一个开头。如果我创建一个窗体窗体应用程序并在窗体中创建一个数据网格视图,我应该如何去实现网格中的功能。以下是我的C++代码。在c中实现数独求解器#

#include<iostream.h> 
#include<conio.h> 




int a[9][9],b[9][9]; 

int inputvalue(int x, int y, int value) 
{ 
    for(int i = 0; i < 9; i++) 
    { 
     if(value == b[x][i] || value == b[i][y]) 
      return 0; 
    } 

    for (i = (x/3) * 3; i <= ((x/3) * 3) + 2; i++) 
     for (int j = (y/3) * 3; j <= ((y/3) * 3) + 2; j++) 
      if(b[i][j] == value) 
       return 0; 
    return value; 
} 

int solve(int x, int y) 
{ 
    int temp; 
    if(b[x][y] == 0) 
    { 
     for(int i = 1;i < 10; i++) 
     { 
     temp = inputvalue(x, y, i); 
     if(temp > 0) 
     { 
      b[x][y] = temp; 
      if (x == 8 && y == 8) 
       return 1; 
       else if (x == 8) 
       { 
       if (solve(0, y + 1)) 
       return 1; 
      } 
      else 
      { 
      if (solve(x + 1, y)) 
        return 1; 
      } 
     } 
     } 
     if (i == 10) 
     { 
      if (b[x][y] != a[x][y]) 
      b[x][y] = 0; 
      return 0; 
     } 
    } 
    if (x == 8 && y == 8) 
     return 1; 
    else if (x == 8) 
    { 
     if (solve(0, y + 1)) 
      return 1; 
    } 
    else 
    { 
     if (solve(x + 1, y)) 
      return 1; 
    } 
} 



void main() 
{ 
    clrscr(); 
    for(int i = 0;i < 9;i++) 
     for(int j = 0;j < 9;j++) 
     { 
      gotoxy(i + 1,j + 1); 
      cin >> a[i][j]; 
     } 
    for(i = 0;i < 9;i++) 
     for(j = 0;j < 9;j++) 
      b[i][j] = a[i][j]; 
    if(solve(0,0)) 
    { 
     for(i = 0;i < 9;i++) 
      for(j = 0;j < 9;j++) 
      { 
      gotoxy(i + 1,j + 1); 
      cout << b[i][j]; 
      } 
    } 
    else 
     cout<<"no solution"; 
    getch(); 
} 
+2

广泛的方法 - 很难提出具体的问题,如果你需要Sudoku求解器 - 周围有很多。如果你需要学习WinForms/WPF - 有很多样本。 –

+2

您是否尝试过QT或TCL/TK或GTK? – Ani

+0

尝试将求解器代码先移植到C#中。然后在C#中添加一个GUI。 – doomster

回答

1

好吧,我想你就会有一个按钮或什么说的形式“开始解决” 所以,你需要注册按钮点击:

this.button1.Click += new System.EventHandler(this.button1_Click); 

,并在button1_Click方法你需要做你的逻辑,就像你在代码中显示的一样。 你可能想知道如何解决datagridview上的每个单元格。这很简单:

dataGridView1[CurrentColumn, CurrentRow] 

返回一个DataGridViewCell,你会转化为你的(我猜DataGridViewTextBoxColumn)像这样

(DataGridViewTextBoxColumn)dataGridView1[CurrentColumn, CurrentRow] 

dataGridView1[CurrentColumn, CurrentRow] as DataGridViewTextBoxColumn 

,然后使用编辑细胞Text

(dataGridView1[CurrentColumn, CurrentRow] as DataGridViewTextBoxColumn).Text = MyText 
+0

谢谢,得到了一些方向。 – user2632990