在c#中实现数独求解器

时间:2013-07-30 07:16:57

标签: c# c++ windows user-interface sudoku

我用C ++创建了一个数独求解器。但是我需要一个GUI。由于我不熟悉VC ++,我无法用它创建GUI,而是用c#创建它。我已经完成了c#的基础知识,但需要一个开端。如果我创建一个Windows窗体应用程序并在窗体中创建一个数据网格视图,我应该如何在网格中实现功能。下面是我的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();
}

1 个答案:

答案 0 :(得分: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