题目描述: 将数字1-9填入以下九宫格,要求每行每列及每个小方格(共九个)均为1-9,不能重复出现, 管理员密码的后九位就在第五行。要求编程解出其值。 输入: 无 输出: 标准输出,输出这九个整数,每个数字占一行 九宫格如下: 0 0 3 8 1 0 0 0 9 5 0 0 4 0 0 0 8 0 0 6 0 9 0 0 1 0 0 0 0 8 0 3 0 0 0 6 0 0 0 0 0 0 0 0 0 9 0 0 6 0 0 5 0 0 0 0 6 0 0 9 0 1 0 0 1 0 0 0 5 0 0 4 2 0 0 0 4 8 7 0 0 注:为“0”的位置为空。不一定需要程序,只求讲解一下算法,思路。本人最近苦思冥想仍不得其解,编译漏洞百出,肯请高人指点!有意着请与本人联系~ QQ:即为本号763878868; 邮箱:763878868@qq.com 或留下您的联系方式,本人初次在这里问问题,故此将所有积分倾囊相赠,如得高见,不胜感激!!!
//遍历所有空格子。 for( int a = 0; a < 9; a++ )//行。 { for( int b = 0; b < 9; b++ )//列。 { if()//a行b列是0。 { //从1-9,找到可填入的数字。 for( int c = 1; c <= 9; c++ ) { bool isOk = true; for( int d = 0; d < 9; d++ ) { if()//如果a行d列是c。 { isOk = false; break; } else if()//如果d行b列是c。 { isOk = false; break; } } if( isOk )//横纵都没有冲突。 { //判断3*3的9个格子里有没有冲突。 for( int d = ; d < ; d++ )//d的初始值 = a除以3取整。 { for( int e = ; e < ; e++ )//e的初始值 = b除以3取整。 { if()//如果d行e列是c。 { isOk = false; break; } } if( !isOk ) { break; } } } if( isOk )//该数字可以填进空格子。 ( //记录该数字。注意,要同时记录该格子的a和b,以便回滚。 ) else if( c == 9 )//没有任何可以填入的数字,这说明前边就有错的地方了。 { //回滚。即,将a、b改为前边格子的行、列索引,并将c设置为其填入的数字加1.当然,如果前边一个数字是9,那就再回滚一个。 } } } } }