这道题的思路不是很难的吧,也是DFS就可以解决的,不过输入的时候为什么要用字符串输入的呢,不懂,但是我用SCANF就不行的嘛,还是纠结的,看了DISCUSS,过了,但1426MS,代码就不贴了嘛,据说有反着搜的方法,去看看再说的。
用数组来表示当前组什么数字用过的是能节约时间的了。
for(i=1;i<=9;i++)
      for(j=1;j<=9;j++){
          soduku[i][j] = c[i-1][j-1] - '0';
                row_can[i][soduku[i][j]]=1;
                col_can[j][soduku[i][j]]=1;
                sqr_can[(i-1)/3*3+(j-1)/3+1][soduku[i][j]]=1;
   }

这段是预处理的代码
进行DFS的时候,到了第I行,在row_can数组中寻找到第I行就能找到当前第I行还有哪些数字不能用,列也是一样的道理,不过判断3*3的那个方格的时候,比如第I行J列的数字是9,那么在第九列去标志,算出当前数字属于第几的一个3*3方格,然后加以标志。
题目不难,但写起来还是很麻烦的呢,今天晚上7点五十就坐火车回学校的了,我争取还做一道题的先。