C语言网

 找回密码
 加入社区!

QQ登录

只需一步,快速开始

查看: 952|回复: 10

一个经典的回溯:老鼠走迷官 [复制链接]

Rank: 1

主题
3
帖子
46
C币
50 枚
在线时间
7 小时
发表于 2011-3-21 19:22:29 |显示全部楼层
分享到:
本帖最后由 zzh1063 于 2011-3-21 19:29 编辑
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. void visit(int, int);
  4. int maze[9][9] = {
  5.          {2, 2, 2, 2, 2, 2, 2, 2, 2},
  6.          {2, 0, 0, 0, 0, 0, 0, 0, 2},
  7.          {2, 0, 2, 2, 0, 2, 2, 0, 2},
  8.          {2, 0, 2, 0, 0, 2, 0, 0, 2},
  9.          {2, 0, 2, 0, 2, 0, 2, 0, 2},
  10.          {2, 0, 0, 0, 0, 0, 2, 0, 2},
  11.          {2, 2, 0, 2, 2, 0, 2, 2, 2},
  12.          {2, 0, 0, 0, 0, 0, 0, 0, 2},
  13.          {2, 2, 2, 2, 2, 2, 2, 2, 2}};
  14. int startI = 1, startJ = 1; // 入口
  15. int endI = 7, endJ = 7; // 出口
  16. int main(void)
  17. {
  18.          int i, j;
  19.          printf("显示迷宫:\n");
  20.          for(i = 0; i < 9; i++)
  21.          {
  22.                   for(j = 0; j < 9; j++)
  23.                            if(maze[i][j] == 2)
  24.                                     printf("■");
  25.                            else
  26.                                     printf("  ");
  27.                   printf("\n");
  28.          }
  29.          visit(startI, startJ);
  30.          return 0;
  31. }
  32. void visit(int i, int j)
  33. {
  34.          int m, n;
  35.          maze[i][j] = 1;
  36.          if(i == endI && j == endJ)
  37.          {
  38.                   printf("\n显示路径:\n");
  39.                   for(m = 0; m < 9; m++)
  40.                   {
  41.                            for(n = 0; n < 9; n++)
  42.                                     if(maze[m][n] == 2)
  43.                                              printf("■");
  44.                                     else if(maze[m][n] == 1)
  45.                                              printf("◇");
  46.                                     else
  47.                                              printf("  ");
  48.                            printf("\n");
  49.                   }
  50.          }
  51.          if(maze[i][j+1] == 0) visit(i, j+1);
  52.          if(maze[i+1][j] == 0) visit(i+1, j);
  53.          if(maze[i][j-1] == 0) visit(i, j-1);
  54.          if(maze[i-1][j] == 0) visit(i-1, j);
  55.          maze[i][j] = 0;
  56. }
复制代码
1

查看全部评分

Rank: 1

主题
0
帖子
5
C币
5 枚
在线时间
1 小时
发表于 2011-3-21 21:41:36 |显示全部楼层
请问最后的maze[i][j]=0,如何回溯实现的
菜鸟

Rank: 1

主题
0
帖子
5
C币
5 枚
在线时间
1 小时
发表于 2011-3-21 21:45:45 |显示全部楼层
的确很经典,看了五分钟材明白
菜鸟

Rank: 1

主题
3
帖子
46
C币
50 枚
在线时间
7 小时
发表于 2011-3-22 14:23:57 |显示全部楼层
回复 2# bhxiaobo


    maze[j]=0就是当前的,就不用回溯了呀!~呵呵

Rank: 1

主题
0
帖子
1
C币
25 枚
在线时间
2 小时
发表于 2011-11-6 21:17:34 |显示全部楼层
不错啊、

Rank: 1

主题
0
帖子
2
C币
41 枚
在线时间
2 小时
发表于 2011-11-7 00:35:57 |显示全部楼层
好神奇的东东啊!看了好久才明白

Rank: 1

主题
0
帖子
3
C币
18 枚
在线时间
1 小时
发表于 2011-11-7 09:55:55 |显示全部楼层
看不懂

Rank: 1

主题
0
帖子
3
C币
18 枚
在线时间
1 小时
发表于 2011-11-7 09:56:19 |显示全部楼层
。。。。

Rank: 1

主题
0
帖子
3
C币
18 枚
在线时间
0 小时
发表于 2011-11-8 11:16:43 |显示全部楼层
int startI = 1, startJ = 1; // 入口

int endI = 7, endJ = 7; // 出口

这里对应的是矩阵的哪呢?

Rank: 1

主题
0
帖子
2
C币
14 枚
在线时间
1 小时
发表于 2011-11-9 00:24:24 |显示全部楼层
哈哈  不错 很不错
您需要登录后才可以回帖 登录 | 加入社区!

C语言 ( 粤ICP备11042647号-2 )

GMT+8, 2012-5-20 17:46

©2009-2011 cyuyan.com.cn

回顶部