C++ 广度优先搜索 BFS 解最短路径问题

#include
#include
#include
//点位结构体; 
using namespace std;
struct point {
	int x;
	int y;
	int step;
};
queue que; //点位列队 
int map[51][51],book[51][51];//地图 标记点; 
int m,n,p,q;//地图大小M行N列,终点坐标P,Q;

void DFS(){
	//行走方式 
	int next[4][2]={
		{0,1},{1,0},{0,-1},{-1,0} 
	};
	//起点入队 计入记录 
	book[0][0]=1;
	struct point np;
	np.x=0;
	np.y=0;
	np.step=0;
	que.push(np);
	while(!que.empty()){
		for(int i=0;i<4;i++){
			//点位+1 
			int nx=que.front().x+next[i][0];
			int ny=que.front().y+next[i][1];
			int step=que.front().step+1;
			//判断边界
			if(nx<0||nx>m ||ny<0||ny>n)
				continue;
			//判断标记
			if(map[nx][ny]==0 && book[nx][ny]==0){ //判断是否走过 判断是否障碍物 
				book[nx][ny]=1;//标记走过 
				struct point np;//创建点位 
				np.x=nx;
				np.y=ny;
				np.step=step;
				que.push(np);//点位入队 
			}
			if(nx==p-1 && ny==q-1){ //到达终点 退出函数 
				return ;
			}
		}
		//一个点扩展完了出队  
		que.pop(); 
	}
}

int main(void){
	cin>>m>>n;
	cin>>p>>q;
	//读入地图 
	for(int i=0;i>map[i][j];
		}
	}
	DFS();
	//输入最短路径 
	cout<

 

你可能感兴趣的:(C,C++,算法)