前几年搞的小程序,不多说,上代码,走的深度优先,我自己不习惯写代码加注释,想到哪里写到哪里,自己看看就好。

数独输入为c矩阵,需要填空的地方为0

c=[0 0 5 3 0 0 0 0 0;
   8 0 0 0 0 0 0 2 0;
   0 7 0 0 1 0 5 0 0;
   4 0 0 0 0 5 3 0 0;
   0 1 0 0 7 0 0 0 6;
   0 0 3 2 0 0 0 8 0;
   0 6 0 5 0 0 0 0 9;
   0 0 4 0 0 0 0 3 0;
   0 0 0 0 0 9 7 0 0];
treenumx=[];
treenumy=[];
for i=1:9
  for j=1:9
    if c(i,j)>0
     tree(i,j).x=c(i,j);
    else
     un1=union(c(i,:),c(:,j));
     un1=union(un1,c(floor((i-1)/3)*3+1:floor((i-1)/3)*3+3,floor((j-1)/3)*3+1:floor((j-1)/3)*3+3));
     tree(i,j).x=setdiff([1:9],un1);
     treenumx=[treenumx i];
     treenumy=[treenumy j];
    end
  end
end
layout=1;
c2=c;
tab=ones(length(treenumx),1);
noden=zeros(length(treenumx),1);
for k=1:length(treenumx)
  noden(k)=length(tree(treenumx(k),treenumy(k)).x);
end
if sum(noden==0)>0
  error('Please check input')
end
while 1 
  i=treenumx(layout);
  j=treenumy(layout);
  squnear=c2(floor((i-1)/3)*3+1:floor((i-1)/3)*3+3,floor((j-1)/3)*3+1:floor((j-1)/3)*3+3);
  nodes=tree(treenumx(layout),treenumy(layout)).x(tab(layout));
  if nodes~=c(i,j) && (isempty(intersect(nodes,c2(i,:)))) && (isempty(intersect(nodes,c2(:,j)))) && (isempty(intersect(nodes,squnear)))
      c2(i,j)=nodes;
     
      layout=layout+1;
      if layout>length(treenumx)
          break
      end
  else
      if tab(layout)<noden(layout)
          tab(layout)=tab(layout)+1;
      else
          tab(layout)=1;
          c2(i,j)=0;
          layout=layout-1;
      end
  end 
%  display([num2str(layout) '-' num2str(tab(layout))]);
end
c2

最近在看一本书,B站的明星人物–罗翔老师写的《圆圈正义》,听他的讲座挺有趣,用时髦的话讲,就是一些奇奇怪怪的知识又增加了,虽然和我的专业关系不大。

有一天上午,在刷了很多视频后,罗老师讲到一个例子,就是世界上不可能有完美的圆,但是你不能否认圆的存在,同理,虽然有些时候见到社会许多不公正的现象,但是你也不能否定正义的存在。顺便之后安利一把《圆圈正义》,于是乎x东火速下单买回来了。

大概下午的时间翻了大半,感觉还不错,都是一些小随笔,并不是很严肃地分析人性的善于恶,很多案例还是比较新的,紧跟时事,当成个人日记看看还是不错的。有时候,我们总是习惯去当网络中的“键盘侠”和生活中的“口水侠”,理所当然用自己的认知去评论一些事情,看过这本书大概可以让我们从不同的角度来看待一些问题。

里面有一段我大概觉得写的不错,

真正的自由是做正确事情的自由,随意吸毒不叫自由,可以控制自己不去沾染毒品才是自由。任意更换性伴侣,始乱终弃不是自由,可以约束自己的欲望才叫自由。百花争妍,但仍能终于命定的那朵玫瑰,才是真正的性自由。