社区讨论
求助,tle两个点,求各位dalao讲讲为啥tle了
P1443马的遍历参与者 3已保存回复 2
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 2 条
- 当前快照
- 1 份
- 快照标识符
- @mi7ycggf
- 此快照首次捕获于
- 2025/11/21 05:37 4 个月前
- 此快照最后确认于
- 2025/11/21 05:37 4 个月前
CPP
#include<bits/stdc++.h>
using namespace std;
int n,m,sx,sy;
int dx[10]={1,2,2,1,-1,-2,-2,-1};
int dy[10]={-2,-1,1,2,2,1,-1,-2};
bool vis[401][401];
int ans[401][401];
struct node
{
int x,y,step;
}tou,dd,d;
queue<node>q;
int bfs(int x,int y)
{
node tou;
tou.x=sx;
tou.y=sy;
tou.step=0;
q.push(tou);
vis[sx][sy]=1;//对起点入队
while(!q.empty())
{
node d=q.front();//取出,遍历当前队头的子节点
for(int k=0;k<=7;k++)
{
int tx=d.x+dx[k];
int ty=d.y+dy[k];
if(tx>=1&&ty>=1&&tx<=n&&ty<=m&&!vis[tx][ty])
{
//cout<<tx<<" "<<ty<<endl;
node dd;
dd.x=tx;
dd.y=ty;
if(tx==x&&ty==y) return d.step+1;
dd.step=d.step+1;
q.push(dd);//子节点入队
vis[tx][ty]=1;
}
}
q.pop();//弹出头节点
}
return -1;
}
int main()
{
cin>>n>>m>>sx>>sy;
for(int i=1;i<=n;i++)
{
for(int j=1;j<=m;j++)
{
if(i==sx&&j==sy)
{ printf("%-5d",0);continue;}
printf("%-5d",bfs(i,j));
while(!q.empty()) q.pop();
memset(vis,0,sizeof(vis));
}
cout<<endl;
}
return 0;
}
回复
共 2 条回复,欢迎继续交流。
正在加载回复...