略有收获的bfs,使用了try_enqueue函数使得加入队列非常方便。性能理论上是一样的因为是inline?
还有就是左对齐是使用%-4d,相对于右对齐的%4d,还有右对齐前导零的%04d,自己试一下呗。
#include<bits/stdc++.h>
using namespace std;
#define ll long longint n,m,sx,sy;int ans[][];struct QueueNode{
int x,y,t;
QueueNode(int x=,int y=,int t=):x(x),y(y),t(t){}
};queue<QueueNode> q;
inline void try_enqueue(int x,int y,int t){
if(x>=&&x<=n&&y>=&&y<=m&&ans[x][y]==-){
ans[x][y]=t+;
q.push(QueueNode(x,y,t+));
}
}void bfs(){
try_enqueue(sx,sy,-);
while(!q.empty()){
QueueNode cur=q.front();
q.pop(); int x=cur.x;
int y=cur.y;
int t=cur.t; try_enqueue(x-,y-,t);
try_enqueue(x-,y-,t);
try_enqueue(x-,y+,t);
try_enqueue(x-,y+,t);
try_enqueue(x+,y+,t);
try_enqueue(x+,y+,t);
try_enqueue(x+,y-,t);
try_enqueue(x+,y-,t);
}
}int main(){
scanf("%d%d%d%d",&n,&m,&sx,&sy);
memset(ans,-,sizeof(ans)); bfs(); for(int i=;i<=n;i++){
for(int j=;j<=m;j++){
printf("%-4d%c",ans[i][j]," \n"[j==m]);
}
}
}