天天看点

练习24

  1. #include <stdio.h>
  2. #define M 7
  3. #define N 4
  4. typedef struct
  5. {
  6.     int x;
  7.     int y;
  8. }Pos;
  9. //保存路径(包括起点)
  10. Pos path[M+N+1];
  11. int counter = 0;
  12. FILE* fp;
  13. void move(int x, int y, int i)
  14. {
  15.     if(x>M || y>N)
  16.         return;
  17.     else 
  18.     {
  19.         //如果合法,记录地点
  20.         path[i].x = x;
  21.         path[i].y = y;
  22.         if(x==M && y==N)//如果已经到达单位,输出
  23.         {
  24.             int k;
  25.             counter++;//计算路径总数
  26.             for(k=0; k<M+N+1; k++)
  27.                 //printf(" (%d,%d) ",path[k].x,path[k].y);
  28.                 fprintf(fp," (%d,%d) ",path[k].x,path[k].y);//输出到文件
  29.             fprintf(fp,"/n");
  30.         }
  31.         else
  32.         {
  33.             i++;
  34.             move(x+1,y,i);//分治
  35.             move(x,y+1,i);//分治
  36.         }
  37.     }
  38. }
  39. void main()
  40. {
  41.     fp = fopen("path.txt","w");
  42.     move(0,0,0);
  43.     fprintf(fp,"一共有%d条路径!/n",counter);
  44.     fclose(fp);
  45. }

继续阅读