學長您好 我不曉得為甚麼我改成多冊資輸入+每輸入一回會自動更新紀錄的值,但上傳ZJ是WA,請求協助
[mw_shl_code=cpp,true]#include<iostream>
using namespace std;
int n,sudoku[9][9],N;
int ok[9][9][9];
void init_ok(void)
{
for(int i=0;i<9;i++)
{
for(int j=0;j<9;j++)
{
for(int k=0;k<9;k++) ok[j][k]=0;
}
}
}
void modify(int x,int y,int i,int w)
{
for(int j=0;j<N;j++)
{
ok[y][j]+=w;
ok[j][x]+=w;
}
int a=(y/n)*n;
int b=(x/n)*n;
for(int l=a;l<a+n;l++)
{
for(int m=b;m<b+n;m++)
{
ok[l][m]+=w;
}
}
}
bool solve(void)
{
int z_min=10,x,y,a,b;
for(int i=0;i<N;i++)
{
for(int j=0;j<N;j++)
{
if(sudoku[j]==0)
{
int z=0;
for(int k=0;k<N;k++)
{
if(ok[j][k]==0) z++;
}
if(z_min>z)
{
y=i;
x=j;
z_min=z;
}
}
}
}
if(z_min==10) return true;
if(z_min==0) return false;
else
{
for(int i=0;i<N;i++)
{
if(ok[y][x]==0)
{
sudoku[y][x]=i+1;
modify(x,y,i,1);
if(solve()) return true;
else
{
sudoku[y][x]=0;
modify(x,y,i,-1);
}
}
}
return false;
}
}
int main()
{
while(cin>>n)
{
N=n*n;
init_ok();
for(int i=0;i<N;i++)
{
for(int j=0;j<N;j++)
{
cin>>sudoku[j];
}
}
for(int i=0;i<N;i++)
{
for(int j=0;j<N;j++)
{
if(sudoku[j]!=0)
{
modify(j,i,sudoku[j]-1,1);
}
}
}
if(solve()==false) cout<<"NO SOLUTION\n";
else
{
for(int i=0;i<N;i++)
{
for(int j=0;j<N;j++) cout<<sudoku[j]<<' ';
cout<<"\n";
}
}
}
return 0;
}
[/mw_shl_code]
愛用插入代碼...
By Sylveon