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 @   lwx_R  阅读(18)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律
点击右上角即可分享
微信分享提示