1、问题描述:从起点到终点所走过的最短路线。

  分析:用到队列来进行存储。

2、代码实现

因为要用到队列,所以用C++实现更好。

#include
#include
#include
#include
using namespace std;

#define ROW_COUNT    8
#define COL_COUNT    8

#define WALL        1
#define NOT_WALL    0

#define WALL_COUNT    16

typedef struct POS{
    int x;  //行
    int y;  //列
    bool operator==(const POS &pos){  //对==运算符的重载
        return (x==pos.x && y==pos.y);
    }
}POS;

void initmap(int (*map)[COL_COUNT], int count); //初始化图
void showmap(int (*map)[COL_COUNT], int row, int col); //显示图
bool findPath(int (*map)[COL_COUNT], POS start, POS end, int &pathlen, POS *&path);//寻找最短路径

bool findPath(int (*map)[COL_COUNT], POS start, POS end, int &pathlen, POS *&path){
    if(start == end){
        pathlen = 0;
        return true;
    }
    POS curpos = start;
    int NumOfnbr = 4;
    queue Q;

    POS offset[4]; //控制方向
    offset[0].x = 0; offset[0].y = 1;  //right
    offset[1].x = 1; offset[1].y = 0;  //down
    offset[2].x = 0; offset[2].y = -1; //left
    offset[3].x = -1; offset[3].y = 0; //up

    map[curpos.x][curpos.y] = 2; //起点初始化为2
    POS nbr; //邻接点
    do{
        for(int i = 0; i < NumOfnbr; i++){
            nbr.x = curpos.x + offset[i].x;  //right
            nbr.y = curpos.y + offset[i].y;
            if(map[nbr.x][nbr.y] == 0){
                map[nbr.x][nbr.y] = map[curpos.x][curpos.y]+1;
                if(nbr == end)
                    break;
                Q.push(nbr);
            }
        }

        if(nbr == end){
            break;
        }
        if(Q.empty()){
            return false;
        }
        curpos = Q.front();
        Q.pop();
    }while(true);

    pathlen = map[end.x][end.y] - 2; //画出模型才能看出
    path = new POS[pathlen];
    curpos = end;
    for(int j = pathlen-1; j >= 0; j--){
        path[j] = curpos;
        for(int i = 0; i < NumOfnbr; i++)
        {
            nbr.x = curpos.x + offset[i].x;
            nbr.y = curpos.y + offset[i].y;
            if(map[nbr.x][nbr.y] == j+2)
                break;
        }
        curpos = nbr;
    }
    return true;
}

void showmap(int (*map)[COL_COUNT], int row, int col){
    int i;
    int j;

    for(i = 0; i < row; i++){
        for(j = 0; j < col; j++){
            cout< 
  

运行结果


最后的那个图就是所找的具体情况图了;