求助,C++bfs60分,开O280
查看原帖
求助,C++bfs60分,开O280
304524
崔化博楼主2021/4/5 18:11

RT

#include <iostream>
#include <cstring>
#include <algorithm>
#include <queue>
#include <cstdio>
using namespace std;
struct node{
	int x,y,step;
};
int n,m,xx,yy,dx[8]={1,1,2,2,-1,-1,-2,-2},dy[8]={2,-2,-1,1,2,-2,1,-1},vis[500][500];
bool pd(int x,int y){
	if(x<1||x>n||y<1||y>m||vis[x][y])
		return 0;
	return 1;
}
int bfs(node sx,node ex){
	queue<node> s;
	vis[sx.x][sx.y]=1;
	s.push(sx);
	while(!s.empty()){
		node p=s.front();
		s.pop();
		for(int i=0;i<8;++i){
			if(s.front().x==ex.x&&s.front().y==ex.y)
				return s.front().step;
			int x=p.x+dx[i];
			int y=p.y+dy[i];
			if(pd(x,y)){
				vis[x][y]=1;
				s.push((node){x,y,p.step+1});
				//cout<<s.front().x<<' '<<s.front().y<<endl;
			}
			
		}
	}
	return -1;
}
int main()
{
	cin>>n>>m;
	cin>>xx>>yy;
	for(int i=1;i<=n;++i){
		for(int j=1;j<=m;++j){
			if(i==xx&&j==yy){
				printf("%-5d",0);
				continue;
			}
			memset(vis,0,sizeof(vis));
			printf("%-5d",bfs((node){xx,yy,0},(node){i,j,0}));
		}
		cout<<endl;
	}
	return 0;
}

4TLE

2021/4/5 18:11
加载中...