1 条题解

  • 1
    @ 2024-12-10 16:41:08
    #include<iostream>
    #include<cstring>
    #include<queue>
    using namespace std;
    struct Pos
    {
    	int x,y;
    };
    queue <Pos> q; //定义队列
    const int n=20;
    const int dx[]={2,2,2,2,1,1,-1,-1,-2,-2,-2,-2};
    const int dy[]={-2,-1,1,2,-2,2,-2,2,-2,-1,1,2}; //定义12个方向
    int x,y,tx,ty,a_x,a_y,b_x,b_y,dis[21][21],ans_a,ans_b;
    bool vis[21][21];
    int bfs(int sx,int sy)
    {
    	memset(vis,false,sizeof(vis));
    	memset(dis,false,sizeof(dis)); //每次清空
    	while(!q.empty()) q.pop();
    	q.push((Pos){sx,sy}); //加入队列
    	vis[sx][sy]=true;
    	while(!q.empty())
    	{
    		x=q.front().x;
    		y=q.front().y;
    		q.pop();
    		if(x+y==2) return dis[1][1];
    		for(int i=0;i<12;i++)
    		{
    			tx=x+dx[i];
    			ty=y+dy[i];
    			if(tx<=0||tx>n||ty<=0||ty>n) continue;
    			if(vis[tx][ty]==true) continue;
    			dis[tx][ty]=dis[x][y]+1;
    			vis[tx][ty]=true;
    			q.push((Pos){tx,ty}); //弹出
    		}
    	}
    }
    int main()
    {
    	cin>>a_x>>a_y>>b_x>>b_y;
    	ans_a=bfs(a_x,a_y);
    	ans_b=bfs(b_x,b_y);
    	cout<<ans_a<<endl;
    	cout<<ans_b<<endl; //输出
    	return 0;
    }
    
    • 1

    信息

    ID
    802
    时间
    1000ms
    内存
    125MiB
    难度
    9
    标签
    递交数
    14
    已通过
    4
    上传者