力扣:有效的数独 (C语言--暴力搜索)

题目描述:

请你判断一个 9 x 9 的数独是否有效。只需要 根据以下规则 ,验证已经填入的数字是否有效即可。

数字 1-9 在每一行只能出现一次。
数字 1-9 在每一列只能出现一次。
数字 1-9 在每一个以粗实线分隔的 3x3 宫内只能出现一次。(请参考示例图)
 

注意:

一个有效的数独(部分已被填充)不一定是可解的。
只需要根据以上规则,验证已经填入的数字是否有效即可。
空白格用 '.' 表示。

 

一、解题思路

呜呜呜我不会哈希表,目前没有学到这个

剩下的思路在代码旁边注释了

二、代码

代码如下(示例):

bool isValidSudoku(char** board, int boardSize, int* boardColSize){
     int i,j,k;
     int m,n;
     for(i=0;i<boardSize;i++)
     {
         for(j=0;j<*boardColSize;j++)
         {
             if(board[i][j]!='.')//遍历数组找到1-9
             {
                 for(k=0;k<*boardColSize;k++)
                 {
                     if(j!=k&&board[i][j]==board[i][k])//判断行
                     {
                         return false;
                     }
                 }
                 for(k=0;k<boardSize;k++)
                 {
                     if(i!=k&&board[k][j]==board[i][j])//判断列
                     {
                         return false;
                     }
                 }
                 int x=i/3*3;
                 int y=j/3*3;//这ge规律是看另一个大佬学到的
                 for(m=0;m<3;m++)
                 {
                     for(n=0;n<3;n++)
                     {
                         if(x+m!=i&&y+n!=j&&board[i][j]==board[x+m][y+n])//判断3*3数组
                         {
                             return false;
                         }
                     }
                 }
             }
         }
     }
     return true;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值