1 条题解
-
1
思路
使用bfs解决,需要注意判断当前点是否被遍历过,否则会死循环。
AC Code
#include<bits/stdc++.h> #define ll long long using namespace std; const ll N=405; ll n,m,x,y,ans[N][N],d[8][2]={-1,2,-1,-2,1,2,1,-2,2,1,2,-1,-2,-1,-2,1}; struct node{ ll x,y,cnt; }; queue<node> q; void bfs(ll x,ll y){ q.push({x,y,0}); while(!q.empty()){ node p=q.front(); q.pop(); if(p.x<1||p.y<1||p.x>n||p.y>m||ans[p.x][p.y]!=-1) continue; ans[p.x][p.y]=p.cnt; for(ll i=0;i<8;i++) q.push({p.x+d[i][0],p.y+d[i][1],p.cnt+1}); } } int main(){ memset(ans,-1,sizeof(ans)); scanf("%lld%lld%lld%lld",&n,&m,&x,&y); bfs(x,y); for(ll i=1;i<=n;i++) for(ll j=1;j<=m;j++) printf("%lld%c",ans[i][j],j==m?'\n':' '); return 0; }
- 1
信息
- ID
- 761
- 时间
- 1000ms
- 内存
- 128MiB
- 难度
- 4
- 标签
- 递交数
- 139
- 已通过
- 60
- 上传者