Channel_Choo @ 2023-09-09 10:56:26
#include <iostream>
#include <stdio.h>
#include <queue>
#include <cctype>
#include <string.h>
using namespace std;
char c[1001][1001] = {'1'};
int map[1001][1001];
int x1, y1, x2, y2;
int dx[4] = {1, 0, 0, -1};
int dy[4] = {0, 1, -1, 0};
int n;
int qr()
{
int k = 0, f = 1 ;
char c = getchar() ;
while(!isdigit(c)){if(c == '-') f = -1 ;c = getchar() ;}
while(isdigit(c)) k = (k << 1) + (k << 3) + c - 48 ,c = getchar() ;
return k * f ;
}
void write(int x)
{
if(x<0)
{
x=-x;
putchar('-');
}
if(x>9)
{
write(x / 10);
}
putchar(x % 10+'0');
}
struct Point
{
int x, y;
};
queue <Point> q;
void bfs(int startx, int starty)
{
q.push((Point){startx, starty});
map[startx][starty] = 0;
c[startx][starty] = '1';
while (q.size() > 0)
{
Point now = q.front();
q.pop();
if (now.x == x2 && now.y == y2)
{
write(map[now.x][now.y]);
return ;
}
for (int i = 0;i < 4;i++)
{
int nx = now.x + dx[i];
int ny = now.y + dy[i];
if (nx >= 1 && nx <= n && ny >= 1 && ny <= n && c[nx][ny] == '0' && map[nx][ny] == -1)
{
map[nx][ny] = map[now.x][now.y] + 1;
c[nx][ny] = '1';
q.push((Point){nx, ny});
}
}
}
}
int main()
{
n = qr();
for (int i = 1;i <= n;i++)
{
for (int j = 1;j <= n;j++)
{
c[i][j] = getchar();
}
getchar();
}
memset(map, -1, sizeof(map));
x1 = qr();
y1 = qr();
x2 = qr();
y2 = qr();
bfs(x1, y1);
return 0;
}
没加快读快写是可以的,加了快读快写RE,求助大佬qwq
by YR123 @ 2023-09-30 14:48:14
快读中的c和全局的c数组重名了