用来记笔记用的(笔记)
#include<bits/stdc++.h>
using namespace std;
int n,a[100][100],sum=1;
int dx[5]={0,-1,0,1,0};//x方向变化
int dy[5]={0,0,1,0,-1};//y方向变化
bool check(int x,int y){//检查是否超界
return x>0&&x<=n&&y>0&&y<=n;
}
void print(){//输出a数组
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
cout<<a[i][j]<<" ";
}
cout<<endl;
}
}
void dfs(int x,int y){//深度优先搜索
if(sum==n*n){//递归出口,检查是否到了尽头
return;
}
for(int i=1;i<=4;i++){//循环四个方向是否可走
int tx=x+dx[i];//每个方向的新坐标
int ty=y+dy[i];
if(a[tx][ty]==0&&check(tx,ty)){//判断是否可走
sum++;//填新数
a[tx][ty]=sum;
dfs(tx,ty);//继续按四方向规则探索
}
}
}
int main() {//主程序
cin>>n;
a[n/2+1][n/2+1]=1;
dfs(n/2+1,n/2+1);
print();
return 0;
}