void mk(int x,int y,int &n)
{
a[x][y]=t++;
if(a[x][y+1]==0)mk(x,y+1,n);
else if(a[x+1][y]==0)mk(x+1,y,n);
else if(y>=2&&a[x][y-1]==0)mk(x,y-1,n);
else if(x>=2&&a[x-1][y]==0)mk(x-1,y,n);
else return;
}
void solve()
{
cin>>n;
memset(a,-1,sizeof a);
FOR(i,1,n)
FOR(j,1,n)
a[i][j]=0;
mk(1,1,n);
for(int i=1;i<=n;i++)
{
for(int j=1;j<=n;j++)
{
printf("%2d ",a[i][j]);
}
cout<<endl;
//printf("\n");
}
}
int main()
{
cin.tie(0)->sync_with_stdio(0); //no string
//cin.exceptions(cin.failbit);// RE->WA
#ifdef DEBUG
freopen("a.in","r",stdin);
freopen("a.out","w",stdout);
#endif
solve();
//getchar();
//system("PAUSE");
return 0;
}
iostream和cstdio不要混用!!!
如上图所例
由于我手动关闭了iostream与stdio的同步
cin.tie(0)->sync_with_stdio(0);
导致在输出同时使用printf和cout时顺序混乱
事实上有些编译器默认sync_with_stdio(0);
所以尽量不要同时使用两者
Q:改为cout<<endl<<flush;
效果仍不不理想,原因暂未知