#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) ",x,y); vis[x][y] = vis[p.first][p.second] + 1; if(p.first==ex&&p.second==ey){ break; } } } } }