Chinaunix

±êÌâ: linux Cһվʽѧϰ [´òÓ¡±¾Ò³]

×÷Õß: bellszhu    ʱ¼ä: 2013-04-21 16:42
±êÌâ: linux Cһվʽѧϰ
Õâ±¾ÊéµÄ12.3½Ú£¬Àý×Ó12.3 ÓÃÉî¶ÈÓÅÏÈËÑË÷½âÃÔ¹¬ÎÊÌâ¡£¡£
¸öÈ˾õµÃ²»ÊÇÉî¶ÈÓÅÏÈ°¡£¬¶øÊǹã¶ÈÓÅÏÈѽ¡£¡£ÇëÎÊÊDz»ÊÇ£¿
³ÌÐòÈçÏ£º
  1. #include <stdio.h>

  2. #define MAX_ROW 5
  3. #define MAX_COL 5

  4. struct point {int row, col;} stack[512];
  5. int top = 0;

  6. void push(struct point p) {
  7.         stack[top] = p;
  8.         top++;
  9. }

  10. struct point pop(void) {
  11.         top--;
  12.         return stack[top];
  13. }

  14. int is_empty(void) {
  15.         return top == 0;
  16. }

  17. int maze[MAX_ROW][MAX_COL] = {
  18.         0, 1, 0, 0, 0,
  19.         0, 1, 0, 0, 0,
  20.         0, 0, 0, 0, 0,
  21.         0, 1, 1, 1, 0,
  22.         0, 0, 0, 1, 0,
  23.        
  24. };

  25. void print_maze(void) {
  26.         int i, j;
  27.         for (i = 0; i < MAX_ROW; i++) {
  28.                 for (j = 0; j < MAX_COL; j++) {
  29.                         printf("%d ", maze[i][j]);
  30.                 }
  31.                 putchar('\n');
  32.         }
  33. }

  34. struct point predecessor[MAX_ROW][MAX_COL] = {
  35.         {{-1, -1}, {-1, -1}, {-1, -1}, {-1, -1}, {-1, -1}},
  36.         {{-1, -1}, {-1, -1}, {-1, -1}, {-1, -1}, {-1, -1}},
  37.         {{-1, -1}, {-1, -1}, {-1, -1}, {-1, -1}, {-1, -1}},
  38.         {{-1, -1}, {-1, -1}, {-1, -1}, {-1, -1}, {-1, -1}},
  39.         {{-1, -1}, {-1, -1}, {-1, -1}, {-1, -1}, {-1, -1}},
  40. };

  41. void visit(int row, int col, struct point pre) {
  42.         struct point visit_point = {row, col};
  43.         maze[row][col] = 2;
  44.         predecessor[row][col] = pre;
  45.         push(visit_point);
  46. }

  47. int main(void) {
  48.         struct point p = {0, 0};
  49.         maze[p.row][p.col] = 2;
  50.         push(p);

  51.         while(!is_empty()) {
  52.                 p = pop();
  53.                 if (p.row == MAX_ROW - 1 && p.col == MAX_COL - 1) {
  54.                         break;
  55.                 }
  56.                 if (p.row + 1 < MAX_ROW && maze[p.row + 1][p.col] == 0) {
  57.                         visit(p.row + 1, p.col, p);
  58.                 }
  59.                 if (p.col + 1 < MAX_COL && maze[p.row][p.col + 1] == 0) {
  60.                         visit(p.row, p.col + 1, p);
  61.                 }
  62.                 if (p.col - 1 >= 0 && maze[p.row][p.col - 1] == 0) {
  63.                         visit(p.row, p.col - 1, p);
  64.                 }
  65.                 if (p.row - 1 >= 0 && maze[p.row - 1][p.col] == 0) {
  66.                         visit(p.row - 1, p.col, p);
  67.                 }
  68.                 print_maze();
  69.         }

  70.         if (p.row == MAX_ROW - 1 && p.col == MAX_COL - 1) {
  71.                 printf("(%d, %d) \n", p.row, p.col);
  72.                 while (predecessor[p.row][p.col].row != -1) {
  73.                         p = predecessor[p.row][p.col];
  74.                         printf("(%d, %d)\n", p.row, p.col);
  75.                 }
  76.         } else {
  77.                 printf("No path!\n");
  78.         }

  79.         return 0;
  80. }
¸´ÖÆ´úÂë





»¶Ó­¹âÁÙ Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2