0
已解决
#include<cstdio>
#include<cstring>
using namespace std;
int n,m;
int main()
{
scanf("%d%d",&n,&m);
int a[n][m],b[n][m],x=0,y=0,tmp=0,k=0;
memset(a,0,sizeof(a));
memset(b,0,sizeof(b));
for(int i=0;i<n;++i)
for(int j=0;j<m;++j)
scanf("%d",&a[i][j]);
while(tmp<(n*m))
{
while(x+1>=0&&x+1<=n&&a[x+1][y]==0&&tmp<n*m) a[++x][y]=++tmp;
while(y-1>=0&&y-1<=m&&a[x][y-1]==0&&tmp<n*m) a[x][--y]=++tmp;
while(x-1>=0&&x-1<=n&&a[x-1][y]==0&&tmp<n*m) a[--x][y]=++tmp;
while(y+1>=0&&y+1<n&&a[x][y+1]==0&&tmp<n*m) a[x][++y]=++tmp;
}
for(int i=0;i<=x;++i){
for(int j=0;j<=y;++j)
printf("%d",b[i][j]);
putchar('\n');
}
}
帮忙看一下哪里错了,谢谢!
0
已采纳
错误有点多啊,
(1)首先while循环先是从左向右,
第一个while应该是while(y+1>=0&&y+1<m。。。。),注意,是m列哦,
第二次是从上往下,应该是
while(x+1>=0&&x+1<=n。。。。)
第三次是
while(y-1>=0&&y-1<=m。。。)
第四次是
while(x-1>=0&&x-1<=n。。。。)
(2)你的二维数组a是你自己输入的,肯定不是0啊,你while循环里判断他是0才填数,肯定不行
(3)按照你的写法,y应该初始化为-1
(4)你的b数组没用啊,就只是最后输出了,中间没用到
(5)正确的思路应该是用另外一个二维数组来标记每个位置是否遍历过,然后用一个大于1000*1000的一维数组存放遍历的数字最后输出。 或者直接一边遍历一边输出
0