社区讨论

求助,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 条回复,欢迎继续交流。

正在加载回复...