你好,欢迎来到电脑编程技巧与维护杂志社! 杂志社简介广告服务读者反馈编程社区  
合订本订阅
 
 
您的位置:杂志经典 / 编程语言
回溯法解数独问题(二)
 

当前位置设置的数值是否和当前行中的已设置数值重复。

 

        /// <summary>

        /// 检查元素的行重复情况

        /// </summary>

        /// <param name="i">小九宫行号</param>

        /// <param name="j">小九宫列号</param>

        /// <param name="k">元素在小九宫内的行号</param>

        /// <param name="l">元素在小九宫内的列号</param>

        /// <param name="IsContainSmall">是否检查小九宫的重复情况</param>

        /// <param name="temp_arr">待比较4维数组</param>

        /// <returns>是否重复,重复:true,不重复:false</returns>

        private bool CheckInRow(int i, int j, int k, int l, bool IsContainSmall,ref int[,,,] temp_arr)

        {

            bool isRepeat = false;

            for (int j1 = 0; j1 < COLUMNS; j1++)

            {

                for (int l1 = 0; l1 < COLUMNS; l1++)

                {

                    if (IsContainSmall)//包含检查小九宫的值

                    {

                        if (j == j1 && l == l1)//跳过自身

                        {

                            continue;

                        }

                        else

                        {

                            if (temp_arr[i, j, k, l] == temp_arr[i, j1, k, l1])

                            {

                                return true;

                            }

                        }

                    }

                    else//不检查小九宫的值

                    {

                        if (j == j1)//跳过整个小九宫

                        {

                            l1 = COLUMNS;

                            continue;

                        }

                        else

                        {

                            if (temp_arr[i, j, k, l] == temp_arr[i, j1, k, l1])

                            {

                                return true;

                            }

                        }

                    }

                }

            }

            return isRepeat;

        }

 

在该约束方法中,为了提高检查效率,增加了一个bool型参数IsContainSmall,用来标识是否需要在小九宫中检查。如果之前已经检查过小九宫内的数字重复情况,则将该参数设置为true,此时函数将跳过在小九宫内和当前位置同行的两个数字,从而达到提高检查效率的目的。

 

当前位置设置的数值是否和当前列中的已设置数值重复。

 

        /// <summary>

        /// 检查元素的列重复情况

        /// </summary>

        /// <param name="i">小九宫行号</param>

        /// <param name="j">小九宫列号</param>

        /// <param name="k">元素在小九宫内的行号</param>

        /// <param name="l">元素在小九宫内的列号</param>

        /// <param name="IsContainSmall">是否检查小九宫的重复情况</param>

        /// <param name="temp_arr">待比较4维数组</param>

        /// <returns>是否重复,重复:true,不重复:false</returns>

 

        private bool CheckInColumn(int i, int j, int k, int l, bool IsContainSmall, ref int[, , ,] temp_arr)

        {

            bool isRepeat = false;

            for (int i1 = 0; i1 < ROWS; i1++)

            {

                for (int k1 = 0; k1 < ROWS; k1++)

                {

                    if (IsContainSmall)//包含检查小九宫的值

                    {

                        if (i == i1 && k == k1)//跳过自身

                        {

                            continue;

                        }

                        else

                        {

                            if (temp_arr[i, j, k, l] == temp_arr[i1, j, k1, l])

                            {

                                return true;

                            }

                        }

                    }

                    else//不包含检查小九宫的值

                    {

                        if (i1 == i)//跳过整个小九宫

                        {

                            k1 = ROWS;

                            continue;

                        }

                        else

                        {

                            if (temp_arr[i, j, k, l] == temp_arr[i1, j, k1, l])

                            {

                                return true;

                            }

                        }

                    }

                }

            }

            return isRepeat;

        }

 

同理,在该约束方法中,为了提高检查效率也设置了一个是否检查小九宫的bool型参数IsContainSmall
  推荐精品文章

·2024年9月目录 
·2024年8月目录 
·2024年7月目录 
·2024年6月目录 
·2024年5月目录 
·2024年4月目录 
·2024年3月目录 
·2024年2月目录 
·2024年1月目录
·2023年12月目录
·2023年11月目录
·2023年10月目录
·2023年9月目录 
·2023年8月目录 

  联系方式
TEL:010-82561037
Fax: 010-82561614
QQ: 100164630
Mail:gaojian@comprg.com.cn

  友情链接
 
Copyright 2001-2010, www.comprg.com.cn, All Rights Reserved
京ICP备14022230号-1,电话/传真:010-82561037 82561614 ,Mail:gaojian@comprg.com.cn
地址:北京市海淀区远大路20号宝蓝大厦E座704,邮编:100089