为什么会输出一个超级奇怪的数
代码由于不压行而又臭又长
#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
*/