题目:蛇形矩阵
算法思路:
一圈一圈的去思考,不是一圈一圈来写循环。外循环次数和k的大小有关,这里的k是要小于等于。
内层,!b[x][y + 1]的意思就等同于b[x][y + 1] == 0 用来判断下一位是不是为空。还要清楚++y和y++之间的区别。
#include<iostream>
using namespace std;
int b[1000][1000];
int main()
{
int n,m,x=1,y=0;
cin>>n>>m;
int k=n*m;
for(int i=1;i<=k;)
{
while(y<m&&!b[x][y+1]) b[x][++y]=i++;
while(x<n&&!b[x+1][y]) b[++x][y]=i++;
while(y>1&&!b[x][y-1]) b[x][--y]=i++;
while(x>1&&!b[x-1][y]) b[--x][y]=i++;
}
for(int i=1;i<=n;i++)
{
for(int j=1;j<=m;j++)
{
cout<<b[i][j]<<" ";
}
cout<<endl;
}
return 0;
}