- #include <stdio.h>
- #define M 7
- #define N 4
- typedef struct
- {
- int x;
- int y;
- }Pos;
- //保存路径(包括起点)
- Pos path[M+N+1];
- int counter = 0;
- FILE* fp;
- void move(int x, int y, int i)
- {
- if(x>M || y>N)
- return;
- else
- {
- //如果合法,记录地点
- path[i].x = x;
- path[i].y = y;
- if(x==M && y==N)//如果已经到达单位,输出
- {
- int k;
- counter++;//计算路径总数
- for(k=0; k<M+N+1; k++)
- //printf(" (%d,%d) ",path[k].x,path[k].y);
- fprintf(fp," (%d,%d) ",path[k].x,path[k].y);//输出到文件
- fprintf(fp,"/n");
- }
- else
- {
- i++;
- move(x+1,y,i);//分治
- move(x,y+1,i);//分治
- }
- }
- }
- void main()
- {
- fp = fopen("path.txt","w");
- move(0,0,0);
- fprintf(fp,"一共有%d条路径!/n",counter);
- fclose(fp);
- }