问题标题: 酷町堂:1742生日游戏

0
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
我要回答