广度优先收索(P1443)
#include <iostream> #include <cstdio> #include <queue> using namespace std; struct point { int x,y; }; int sx=1,sy=1,ex,ey,m[1000][1000],b[1000][1000]; queue <point>t; int main() { int n,m2,v=0;cin>>n>>m2; cin>>sx>>sy; for(int i=1;i<=n;i++){ for(int j=1;j<=m2;j++){ m[i][j]=-1; } } point now,tmp; now.x=sx,now.y=sy,m[now.x][now.y]=0; t.push(now); int aa[8][2]={{1,2},{2,1},{-1,2},{2,-1},{1,-2},{-2,1},{-1,-2},{-2,-1}}; while(t.size()!=0){ now=t.front(); t.pop(); for(int i=0;i<8;i++){ tmp.x=now.x+aa[i][0]; tmp.y=now.y+aa[i][1]; if(tmp.x>=1&&tmp.x<=n&&tmp.y>=1&&tmp.y<=m2&&m[tmp.x][tmp.y]==-1){ m[tmp.x][tmp.y]=m[now.x][now.y]+1; t.push(tmp); } } } for(int i=1;i<=n;i++){ for(int j=1;j<=m2;j++){ printf("%-5d",m[i][j]); } cout<<endl; } return 0; }