笔记
#include<bits/stdc++.h>
using namespace std;
int n,m,a[100][100],sum=1;
int dx[5]={0,0,1,0,-1};//行
int dy[5]={0,1,0,-1,0};//列
bool check(int x,int y){//检查是否超界
return x>0&&x<=n&&y>0&&y<=m;
}
void print(){//输出a数组
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
cout<<setw(3)<<a[i][j];
}
cout<<endl;
}
}
void dfs(int x,int y){//深度优先搜索
if(sum==n*m){//递归出口,检查是否到了尽头
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>>m;
a[1][1]=1;
dfs(1,1);
print();
return 0;
}