标题:初学C# ,有关9×9宫格行列检验问题
只看楼主
rainbowyoo
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2008-11-27
结帖率:0
已结贴  问题点数:10 回复次数:2 
初学C# ,有关9×9宫格行列检验问题
我初始了一个9×9宫格(x,y是lable坐标),行符合数独规则(1~9不重复),但是怎么检验列呢?我的想法是遍历之前有的数字。如果不一样就继续检验,如果一样就重新随机个数字再从头开始重新检验。但是不知道怎么写,或者有没有更好的方法呢?谢谢!
程序代码:
public Form1()
        {
            InitializeComponent();

            Label[,] sudoku = new Label[9, 9];
            Random rd = new Random();
            string[] index = new string[9];
            int y = 25;
            for (int i = 0; i < 9; i++)
            {
                for (int k = 0; k < 9; k++)
                {
                    index[k] = (k + 1).ToString();
                }

                int size = 9;
                int x = 98;
                for (int j = 0; j < 9; j++)
                {
                    int number = rd.Next(0, size - 1);

                    sudoku[i, j] = new System.Windows.Forms.Label();
                    sudoku[i, j].Location = new System.Drawing.Point(x, y);
                    sudoku[i, j].BackColor = System.Drawing.Color.DarkGray;
                    sudoku[i, j].Size = new System.Drawing.Size(30, 30);
                    sudoku[i, j].BorderStyle = System.Windows.Forms.BorderStyle.Fixed3D;
                    sudoku[i, j].Font = new System.Drawing.Font("Verdana", 9F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
                    sudoku[i, j].TextAlign = System.Drawing.ContentAlignment.MiddleCenter;

                    sudoku[i, j].Text = index[number];
                    Controls.Add(sudoku[i, j]);

                    index[number] = index[size - 1];
                    size--;
                    x = x + 30;
                }
                y = y + 30;
            }

        }

搜索更多相关主题的帖子: 从头开始 
2010-12-30 14:59
c1_wangyf
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:7
帖 子:665
专家分:2832
注 册:2010-5-24
得分:10 
搜一下,看看别人的作品是怎么做的吧!!

[ 本帖最后由 c1_wangyf 于 2010-12-31 08:41 编辑 ]
2010-12-31 08:40
rainbowyoo
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2008-11-27
得分:0 
比如我在检验第一列的时候,当前的数字与之前的数字相等,怎么让重新随机出来的数字再回到循环里面从t=0开始重新检验呢?

int number2 = rd.Next(1, 10);
            string[] s = new string[9];
            s[0] = sudoku[0, 0].Text;
            int indexA = 1;
            for (j = 0, i = 1; i < 9; i++)
            {
                for (int t = 0; t < indexA; t++)
                {
                    bool flag = true;
                    if (sudoku[i, j].Text != s[t])
                    {
                        flag = false;
                        continue;
                    }
                    if (flag)
                    {
                        sudoku[i, j].Text = number2.ToString();
                    }
                }
                s[indexA] = sudoku[i, j].Text;
                indexA++;
            }
2011-01-04 11:48



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-330287-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.060182 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved