BFS基础

1.二维数组寻找

//设置方向函数 
int dx[12]={-2,-2,-2,-2,-1,-1,1, 1,2,2, 2, 2};
int dy[12]={1,  2,-1,-2, 2,-2,2,-2,1,2,-1,-2};
//记录是否访问
int vis[150][150];
//记录每一个点数据 step记录寻找的步数
struct point{
    int x,y;
    int step;
};
//x y开始位置
void bfs(int x,int y){
		
	queue<point> q;
	memset(vis,0,sizeof(vis));
	vis[x][y]=1;
	
	point p0;
	p0.x=x;
	p0.y=y;
	p0.step=0;
	
	q.push(p0);
	//队列为空退出 即没有新的符合条件的点可以进入 
	while(!q.empty()){
		point a=q.front();
		q.pop();
		for(int i=0;i<12;i++){
                        //方向上到达的点
			int nx=a.x+dx[i];
			int ny=a.y+dy[i];
                        //判断是否符合条件
			if(nx>=1&&ny>=1&&nx<=100&&ny<=100&&(vis[nx][ny]==0)){

				vis[nx][ny]=1;
				
				point np;
				np.x=nx;
				np.y=ny;
				np.step=a.step+1;//++不行 
				q.push(np);
				
				if(nx==1&&ny==1){
					cout<<a.step+1<<endl;
					return ;
				}
			}
		}
		
	} 
		
	
}
posted @ 2022-09-05 17:57  lwx_R  阅读(25)  评论(0)    收藏  举报