1 、 迷宫求解 设 计 一 个 迷 宫 求 解 程 序 , 要 求 如 下 : ✓ 以M × N 表 示 长 方 阵 表 示 迷 宫 , 求 出 一 条 从 入 口 到 出 口 的 通 路 , 或 得 出 没 有 通 路的 结 论 。 ✓ 能任意设 定的 迷 宫 ✓ (选作)如 果有 通 路 , 列出 所有 通 路 提示: ✓ 以 一 个 二维数组来表 示 迷 宫 , 0 和 1 分别表 示 迷 宫 中的 通 路 和障碍, 如 下 图迷 宫 数据为: 1111111111 1001000101 1001000101 1000011001 1011100001 1000100001 1010001001 1011101101 1100000001 1111111111 入 口 位置: 1 1 出 口 位置: 8 8 ✓ 探索过程 可采用如 下 算法, 设 定当前位置的 初值为入 口 位置; do { 若 当 前 位 置 可 通 , 则 { 将 当 前 位 置 插 入 栈 顶 ; 若 该 位 置 是 出 口 位 置 , 则 结 束 ; 否 则 切 换 当 前 位 置 的 东 邻 方 块 为 新 的 当 前 位 置 ; } 否 则 , { 若 栈 不 空 且 栈 顶 位 置 尚 有 其 他 方 向 未 经 探 索 , 则 设 定 新 的 当 前 位 置 为 沿 顺 时 针 方 向 旋 转 找 到 的 栈 顶 位 置 的 下 一相邻 块 ; 若 栈 不 空 但栈 顶 位 置 的 四周均不 可 通 , 则 { 删去栈 顶 位 置 ; //从路径中删去该 通 道块 若 栈 不 空 , 则 重新 测试新 的 栈 顶 位 置 , 直至找 到 一个可 通 的 相邻 块 出 栈 至栈 空 ; } } } while (栈 不 空 ); #include #include #define MaxSize 32 int a[30][30]; int b[30][30]; int m,n; typedef struct { int i; int j; int di; }Box; typedef struct { Box data[MaxSize]; int top; }StackType; bool sereach(int X,int Y,int X1,int Y1); void main() { int X,Y,Y1,X1; memset(a,0,sizeof(a)); memset(b,0,sizeof(b)); // for() printf("请 输 入迷宫的长度和宽度\n"); while(~ scanf("%d%d",&m,&n)){ printf("请 输 入迷宫(0 表示空地,1 表示围墙)\n"); for(int i=0;i