调不动了,求助
查看原帖
调不动了,求助
671260
Nekomusume楼主2022/4/2 17:59

为什么会输出一个超级奇怪的数

代码由于不压行而又臭又长

#include <iostream>
#include <queue>
using namespace std;

int map[55][55], n, m, a, qx, qy, zx, zy, ans = 0;
char flag;

struct node
{
    int x, y;
    char f;
};

bool is(int x, int y)
{
    if(x >= 1 && x < n && y >= 1 && y < m && map[x][y] == 0)
    {
        return 1;
    }
    else
    {
        return 0;
    }
}

queue<node> q;

int main()
{   
    cin >> n >> m;
    for(int i = 1; i <= n; i++)
    {
        for(int j = 1; j <= m; j++)
        {
            cin >> a;
            if(a == 1)
            {
                map[i - 1][j - 1] = -1;
                map[i - 1][j] = -1;
                map[i][j - 1] = -1;
                map[i][j] = -1;
            }
        }
    }cin >> qx >> qy >> zx >> zy >> flag;
    node qpoint = {qx, qy, flag};
    q.push(qpoint);
    while(!q.empty())
    {
        node po = q.front();
        q.pop();
        ans++;
        if(po.f == 'E')
        {
            node v = {po.x, po.y, 'N'};
            q.push(v);
            v = {po.x, po.y, 'S'};
            q.push(v);
            if(is(po.x, po.y + 1))
            {
                node v = {po.x, po.y + 1, 'E'};
                q.push(v);
                if(!map[po.x][po.y + 1])map[po.x][po.y + 1] = ans;
            }
            if(is(po.x, po.y + 2))
            {
                node v = {po.x, po.y + 2, 'E'};
                q.push(v);
                if(!map[po.x][po.y + 2])map[po.x][po.y + 2] = ans;
            }
            if(is(po.x, po.y + 3))
            {
                node v = {po.x, po.y + 3, 'E'};
                q.push(v);
                if(!map[po.x][po.y + 3])map[po.x][po.y + 3] = ans;
            }
        }
        if(po.f == 'S')
        {
            node v = {po.x, po.y, 'E'};
            q.push(v);
            v = {po.x, po.y, 'W'};
            q.push(v);
            if(is(po.x + 1, po.y))
            {
                node v = {po.x + 1, po.y, 'S'};
                q.push(v);
                if(!map[po.x + 1][po.y])map[po.x + 1][po.y] = ans;
            }
            if(is(po.x + 2, po.y))
            {
                node v = {po.x + 2, po.y, 'S'};
                q.push(v);
                if(!map[po.x + 2][po.y])map[po.x + 2][po.y] = ans;
            }
            if(is(po.x + 3, po.y))
            {
                node v = {po.x + 3, po.y, 'S'};
                q.push(v);
                if(!map[po.x + 3][po.y])map[po.x + 3][po.y] = ans;
            }
        }
        if(po.f == 'W')
        {
            node v = {po.x, po.y, 'N'};
            q.push(v);
            v = {po.x, po.y, 'S'};
            q.push(v);
            if(is(po.x, po.y - 1))
            {
                node v = {po.x, po.y - 1, 'E'};
                q.push(v);
                if(!map[po.x][po.y - 1])map[po.x][po.y - 1] = ans;
            }
            if(is(po.x, po.y - 2))
            {
                node v = {po.x, po.y - 2, 'E'};
                q.push(v);
                if(!map[po.x][po.y - 2])map[po.x][po.y - 2] = ans;
            }
            if(is(po.x, po.y - 3))
            {
                node v = {po.x, po.y - 3, 'E'};
                q.push(v);
                if(!map[po.x][po.y - 3])map[po.x][po.y - 3] = ans;
            }
        }
        if(po.f == 'N')
        {
            node v = {po.x, po.y, 'E'};
            q.push(v);
            v = {po.x, po.y, 'W'};
            q.push(v);
            if(is(po.x - 1, po.y))
            {
                node v = {po.x - 1, po.y, 'S'};
                q.push(v);
                if(!map[po.x - 1][po.y])map[po.x - 1][po.y] = ans;
            }
            if(is(po.x - 2, po.y))
            {
                node v = {po.x - 2, po.y, 'S'};
                q.push(v);
                if(!map[po.x - 2][po.y])map[po.x - 2][po.y] = ans;
            }
            if(is(po.x - 3, po.y))
            {
                node v = {po.x - 3, po.y, 'S'};
                q.push(v);
                if(!map[po.x - 3][po.y])map[po.x - 3][po.y] = ans;
            }
        }
        if(map[zx][zy] != 0)
        {
            for(int i = 0; i <= n; i++)
            {
                for(int j = 0; j <= m; j++)
                {
                    cout << map[i][j] << ' ';
                }cout << endl;
            }
            cout << map[zx][zy] << endl;
            return 0;
        }
    }
    return 0;
}//E S W N 右 下 左 上

/*
0  0    0   0 0    0   -1  -1    0   0   0
0  270  844 0 567  0   -1   -1  -1  -1   0
0  266  89 -1 -1   410 846 846  -1  -1   0
0  262  -1 -1 -1   0    0  0     0   0   0
0  22   -1 -1 127  272  -1  -1  569  0   0
0  22   5  38 38   -1   -1  -1    0  0   0
0  22   5  -1 -1   -1   -1  155  686 686 0
0  3    9  -1 -1   -1   149 155  658 658 0
-1 -1   1  10 10   10   27  28  -1   -1  0
*/
2022/4/2 17:59
加载中...