pathplan.c
上传用户:xk288cn
上传日期:2007-05-28
资源大小:4876k
文件大小:1k
源码类别:

GIS编程

开发平台:

Visual C++

  1. /*
  2.  * pathplan.c - part of the chess demo in the glut distribution.
  3.  *
  4.  * (C) Henk Kok (kok@wins.uva.nl)
  5.  *
  6.  * This file can be freely copied, changed, redistributed, etc. as long as
  7.  * this copyright notice stays intact.
  8.  */
  9. #include "chess.h"
  10. extern int board[10][10];
  11. int path[10][10];
  12. int hops[10][10];
  13. int steps;
  14. int cur_hops;
  15. void init_board(void)
  16. {
  17.     int i,j;
  18.     for (i=0;i<10;i++)
  19.     {
  20. for(j=0;j<10;j++)
  21. {
  22.     hops[i][j] = 0;
  23.     path[i][j] = (board[i][j]?-1:0);
  24. }
  25.     }
  26. }
  27. void test_exit(int i, int j, int dir)
  28. {
  29.     if (i<0 || i>9 || j<0 || j>9)
  30. return;
  31.     if (path[i][j])
  32. return;
  33.     steps ++;
  34.     path[i][j] = dir;
  35.     hops[i][j] = cur_hops + 1;
  36. }
  37. int solve_path(int x1, int y1, int x2, int y2)
  38. {
  39.     int i,j;
  40.     init_board();
  41.     path[x2][y2] = 9;
  42.     hops[x2][y2] = 1;
  43.     path[x1][y1] = 0;
  44.     cur_hops = 1;
  45.     for (;;)
  46.     {
  47. steps = 0;
  48. for (i=0;i<10;i++)
  49. {
  50.     for (j=0;j<10;j++)
  51.     {
  52. if (hops[i][j] != cur_hops)
  53.     continue;
  54. test_exit(i, j-1, SOUTH);
  55. test_exit(i, j+1, NORTH);
  56. test_exit(i-1, j, EAST);
  57. test_exit(i+1, j, WEST);
  58.     }
  59. }
  60. for (i=0;i<10;i++)
  61. {
  62.     for (j=0;j<10;j++)
  63.     {
  64. if (hops[i][j] != cur_hops)
  65.     continue;
  66. test_exit(i-1, j-1, SOUTHEAST);
  67. test_exit(i+1, j-1, SOUTHWEST);
  68. test_exit(i-1, j+1, NORTHEAST);
  69. test_exit(i+1, j+1, NORTHWEST);
  70.     }
  71. }
  72. cur_hops++;
  73. if (path[x1][y1])
  74.     return 1;
  75. if (steps == 0)
  76.     return 0;
  77.     }
  78. }