#include<iostream>
#include<windows.h>
#include "conio.h"
using namespace std;
const int m=10 ; //迷宫行数
const int n=15 ; //迷宫列数
struct migong //结构体迷宫,,,pre为前驱,,,xy 为当前目标
{
int x,y;
int pre;
}sq[500]; //最大成员500个,,迷宫大小,,,,,
int mg[m+2][n+2]; //迷宫数组 外带边2个 ,,
int zx[8+1],zy[8+1]; //迷宫方向数组 九宫格,,,他在中间,,,所以8个方向
void printlj(int rear) //打印迷宫路径
{
int i;
i=rear; //保存当前节点前驱,,为了在,,向前试探失败时,返回,,换一个方向继续
do
{
cout<<sq[i].x<<sq[i].y; //输出当前,,X,y值,,其实就是地址。。。。
i=sq[i].pre; // 保存这个节点的前驱
}while(i!=0); //i!=0表示通路
}
void mglj() //球迷宫最短路径
{
int i,j,x,y,v,front,rear,found;
sq[1].x=sq[1].y=1;sq[1].pre=0; //从(1,1)开始搜索 。。。。左上角开始
found=0; //初始化。
front=rear=1; //初始化
mg[1][1]=-1; //开始节点就不需要来回遍历了,,,不设为-1,,一样可以算,,对于CPU来说无所谓
while((front<=rear)&&(!found)) //found初始化,,等于0 ,,,,这里是一个BUG,,,因为找到了,,他就退出了,,,很多时候不止一条路径
{
x=sq[front].x; //
y=sq[front].y; //引入临时变量x,y,,,保存当前,,,因为下面要进行,,,查找遍历,,,为了能够回到当前节点,,在无法试探的情况下
for(v=1;v<=8;v++) //循环扫描8个方向
{