CSP2019 备战计划-9

Task:pj试炼场2-8(续)

T4 P1443

标准BFS,修改一下移动方式即可

另外注意奇特的输出方式

还有那个参数bfs是一不小心打上去的233

别理解成dfs谢谢QwQ

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
#include<bits/stdc++.h>
using namespace std;
int n,m,sx,sy;
int ans[1000][1000];
bool vis[1000][1000];
int qx[10]={1,1,-1,-1,2,2,-2,-2};
int qy[10]={2,-2,-2,2,-1,1,-1,1};
struct node
{
int x,y,step;
};
void bfs(int x,int y,int step)
{
queue<node> q;
node a;
a.x=x;
a.y=y;
a.step=step;
ans[x][y]=step;
vis[x][y]=1;
q.push(a);
while(q.size())
{
node b;
b=q.front();
q.pop();
for(int i=0;i<8;i++)
{
int nx=b.x+qx[i];
int ny=b.y+qy[i];
if(nx<=n&&ny<=m&&nx>=1&&ny>=1&&!vis[nx][ny])
{
node c;
c.x=nx;
c.y=ny;
c.step=b.step+1;
ans[nx][ny]=c.step;
vis[nx][ny]=1;
q.push(c);
}
}
}
}
int main()
{
cin>>n>>m>>sx>>sy;
memset(ans,-1,sizeof(ans));
bfs(sx,sy,0);
for(int i=1;i<=n;i++)
{
for(int j=1;j<=m;j++)printf("%-5d",ans[i][j]);
cout<<endl;
}
}