1. 程式人生 > >BFS迷宮最短路徑模板

BFS迷宮最短路徑模板

oid pop print ios int pair 出口 最短路 bfs

#include<iostream>
#include<queue>
#define INF 65535
using namespace std;
int vis[100][100]; //路徑長度 
int map[100][100]; //迷宮地圖 
typedef pair<int,int> P; //節點坐標 
P p;
int dx[4] = {1,0,-1,0};  //四個方向 
int dy[4] = {0,1,0,-1};
int sx = 0,sy = 0; //起始坐標 
int ex = 4,ey = 4; //出口坐標 
int N,M;  //迷宮大小 
void
BFS(); //搜素 int main() { int n; //scanf("%d %d",&N,&M); N = 5; M = 5; for(int i=0;i<N;i++){ for(int j=0;j<M;j++){ scanf("%d",&map[i][j]); } } BFS(); printf("%d",vis[N-1][M-1]); return 0; } void BFS(){ queue
<P> que; for(int i=0;i<N;i++){ for(int j=0;j<M;j++){ vis[i][j] = INF; //初始化所有路徑都沒有訪問過 } } vis[sx][sy] = 1; //表示起始路徑長度 que.push(P(sx,sy)); while(que.size()){ p = que.front(); que.pop(); for(int i=0;i<4;i++){
int x = p.first + dx[i]; int y = p.second + dy[i]; if(x>=0&&x<N&&y>=0&&y<M&&map[x][y]!=1&&vis[x][y]==INF){ //表示坐標在範圍內並且沒有訪問過而且路徑是通的就走 que.push(P(x,y)); //printf("(%d,%d)\n",x,y); vis[x][y] = vis[p.first][p.second] + 1; if(p.first==ex&&p.second==ey){ break; } } } } }

BFS迷宮最短路徑模板