题目描述
输入两个整数n和m,输出一个n行m列的矩阵,将数字 1 到 n*m 按照回字蛇形填充至矩阵中。
具体矩阵形式可参考样例。
输入格式
输入共一行,包含两个整数n和m。
输出格式
输出满足要求的矩阵。
矩阵占n行,每行包含m个空格隔开的整数。
数据范围
1≤n,m≤100
样例
输入样例:
3 3
输出样例:
1 2 3
8 9 4
7 6 5
这个是个简单的搜索先把你需要输出的数组范围给填充成零之后用dfs
从一 一点开始搜索即可
#include<bits/stdc++.h>
const int maxn = 105;
using namespace std;
int a[maxn][maxn],dir=0,n,m;//a数组表示地图数组,dir表示你要走的方向
//0 代表向右 1 代表向下 2代表向左 3 代表向上
int d[][2]={{0,1},{1,0},{0,-1},{-1,0}};
int cnt=1;//代表你填充的个数
void dfs(int x,int y,int dir)
{
if(a[x][y]) return ;
a[x][y]=cnt++;
int xx=x+d[dir][0];
int yy=y+d[dir][1];
if(a[xx][yy])
{
dir=(dir+1)%4;
int xxx=x+d[dir][0];
int yyy=y+d[dir][1];
dfs(xxx,yyy,dir);
}
else
{
dfs(xx,yy,dir);
}
}
int main()
{
ios::sync_with_stdio(false);
cin.tie(0);cout.tie(0);
cin>>n>>m;
memset(a,0x3f3f3f3f,sizeof(a));
for(int i=1;i<=n;i++)
{
for(int j=1;j<=m;j++)
{
a[i][j]=0;
}
}
dfs(1,1,0);
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++)
{
cout<<a[i][j]<<' ';
if(j==m) cout<<endl;
}
return 0;
}
tql
瞎搞的不强不强
tqlヽ( ̄▽ ̄)ノ
这方法太妙了,学姐tql