问题描述
大虾们救救我吧我这个都作4天啦,一点进展都没有谁做个数独,给点好的建议,或者好的代码
解决方案
解决方案二:
前段时间无聊,写了个数独得破解软件,如果你有兴趣的,你可以把题目贴出来,我帮你搞下?呵呵
解决方案三:
关注。。。。。。
解决方案四:
是那种9个格子、怎么填写数字相加都一样的东西不?
解决方案五:
问个无关问题国内也玩那个?一直以为日本人才玩
解决方案六:
不用相加,只要每行(9行),每列(9列),每区(9区)的数字都不一样就行了(1~9之间的数)没写过,帮你想想~~~
解决方案七:
usingSystem;usingSystem.IO;usingSystem.Collections.Generic;namespaceSkyiv.Ben.Etc{sealedclassSudoku{byte[,]input,output;intsteps=0;publicSudoku(TextReaderreader){input=newbyte[9,9];for(inty=0;y<9;){strings=reader.ReadLine();if(s==null)break;s=s.Replace('.','0');intx=0;for(inti=0;i<s.Length;i++)if(Char.IsDigit(s,i)&&x<9)input[x++,y]=(byte)(s[i]-'0');if(x!=0)y++;}}publicvoidOut(TextWriterwriter){Compute(input);Out(writer,output);}voidOut(TextWriterwriter,byte[,]output){for(inty=0;y<=output.GetLength(1);y++){if(y%3==0)writer.WriteLine("+---+---+---+");if(y>=output.GetLength(1))break;for(intx=0;x<=output.GetLength(0);x++){if(x%3==0)writer.Write('|');if(x>=output.GetLength(0))break;writer.Write((output[x,y]==0)?'.':(char)(output[x,y]+'0'));}writer.WriteLine();}}boolCompute(byte[,]input){List<byte[,]>list=StepIt(input);if(list==null)returntrue;foreach(byte[,]tempinlist)if(Compute(temp))returntrue;returnfalse;}//returnnullforfinishList<byte[,]>StepIt(byte[,]input){if(steps++>100000)thrownewException("太复杂了");output=input;inttheX=-1,theY=-1;byte[]theDigits=null;for(inty=0;y<input.GetLength(1);y++){for(intx=0;x<input.GetLength(0);x++){if(input[x,y]!=0)continue;byte[]digits=GetDigits(input,x,y);if(digits.Length==0)returnnewList<byte[,]>();if(theDigits!=null&&theDigits.Length<=digits.Length)continue;theX=x;theY=y;theDigits=digits;}}if(theDigits==null)returnnull;List<byte[,]>result=newList<byte[,]>();foreach(bytedigitintheDigits){byte[,]temp=(byte[,])input.Clone();temp[theX,theY]=digit;result.Add(temp);}returnresult;}byte[]GetDigits(byte[,]input,intx,inty){bool[]mask=newbool[10];for(inti=0;i<9;i++){mask[input[x,i]]=true;mask[input[i,y]]=true;}for(inti=x/3*3;i<x/3*3+3;i++)for(intj=y/3*3;j<y/3*3+3;j++)mask[input[i,j]]=true;List<byte>list=newList<byte>();for(inti=1;i<mask.Length;i++)if(!mask[i])list.Add((byte)i);returnlist.ToArray();}}}