A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© wangxiaopang 中级黑马   /  2016-7-15 23:45  /  1382 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

  1. /*
  2. Algorithm Gossip: 老鼠走迷官
  3. 说明老鼠走迷宫是递回求解的基本题型,我们在二维阵列中使用2表示迷宫墙壁,使用1来表示老鼠的行走路径,试以程式求出由入口至出口的路径。(1,1)--(5,5)
  4. 解法老鼠的走法有上、左、下、右四个方向,在每前进一格之后就选一个方向前进,无法前进时退回选择下一个可前进方向,如此在阵列中依序测试四个方向,直到走到出口为止,这是递回的基本题,请直接看程式应就可以理解。

  5. */

  6. #include <stdio.h>
  7. #include <stdlib.h>
  8. void printMap(char arr[7][8]){
  9.     for (int i = 0; i < 7; i++) {
  10.         printf("%s\n",arr[i]);
  11.     }
  12.    
  13. }
  14. void swap(char arr[7][8], int x1,int y1,int x2,int y2){
  15.     char temp= arr[x1][y1];
  16.     arr[x1][y1] = arr[x2][y2];
  17.     arr[x2][y2] = temp;
  18. }
  19. int main(){
  20.     char arr[7][8] ={
  21.         "#######",
  22.         "#1    #",
  23.         "#     #",
  24.         "#     #",
  25.         "#     #",
  26.         "#     #",
  27.         "#######"
  28.     };
  29.     //打印地图
  30.     printMap(arr);
  31.     int num = 0;
  32.     int x = 1,y = 1;
  33.     char ch = ' ';
  34.    // printf("WASD 0123\n");
  35.     while (x != 5 || y != 5) {
  36.         getchar();
  37.         num = arc4random_uniform(4);
  38.         switch (num) {
  39.             case 0:
  40.                 if(arr[x-1][y] == ch){
  41.                     swap(arr,x-1,y,x,y);
  42.                     x = x - 1;
  43.                 }
  44.                 break;
  45.             
  46.             case 1:
  47.                 if(arr[x][y - 1] == ch){
  48.                     swap(arr,x,y - 1,x,y);
  49.                     y =y - 1;
  50.                 }
  51.                 break;
  52.             case 2:
  53.                 if(arr[x+1][y] == ch){
  54.                     swap(arr,x+1,y,x,y);
  55.                     x = x + 1;
  56.                 }
  57.                 break;
  58.             case 3:
  59.                 if(arr[x][y + 1] == ch){
  60.                     swap(arr,x,y + 1,x,y);
  61.                     y =y + 1;
  62.                 }
  63.                 break;
  64.             default:
  65.                 break;
  66.         }
  67.         printMap(arr);
  68.         printf("%d,%d\n",x,y);

  69.     }
  70.     printf("出来了?\n");
  71. }
复制代码

4 个回复

正序浏览
没注释,差评、、哈哈
回复 使用道具 举报
大神,没注释
回复 使用道具 举报
6666,好像以前做过
回复 使用道具 举报
大神好厉害!我摸索了一个星期都还没搞出来呢!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马