ABC 272 D (BFS)
ABC 272 D
题意
给定一个N*N的棋盘,棋子初始位置在(1,1),给定一个数M,棋子每步操作可以走到距离不超过M的位置,假设棋子在(i,j),则下一步(x,y)应满足(x-i)×(x-i)+ (y-j)×(y-j)<= M
思路
这是加强版的bfs,平常的bfs一般是四个方向或者八个方向,这次可以有很多个方向,用dx数组和dy数组存储(x,y)。
代码
void make(int i,int k)
{
dx[++cnt]=i;
dy[cnt]=k;
dx[++cnt]=-i;
dy[cnt]=k;
dx[++cnt]=i;
dy[cnt]=-k;
dx[++cnt]=-i;
dy[cnt]=-k;
}
void solve()
{
cin>>n>>m;
for(int i=0;i*i<=m/2;i++)
{
int k=sqrt((m-i*i)*1.0);
if(k*k!=m-i*i) continue;
//一对{i,j}有几种情况:{i,j} {-i,j} {i,-j} {-i,-j}
//反过来也有
make(i,k);
make(k,i);
}
bfs();
for(int i=1;i<=n;i++)
{
for(int j=1;j<=n;j++)
{
cout<<f[i][j]<<" ";
}
cout<<endl;
}
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(1)