再增加一道:递归题->;求迷宫
- #include <stdio.h>;
- #define m 6 //6行
- #define n 8 //8列
- int maze[m+2][n+2]={
- {1,1,1,1,1,1,1,1,1,1},
- {1,0,0,1,1,0,1,0,1,1},
- {1,1,0,0,1,1,0,0,0,1},
- {1,0,0,0,0,0,0,1,1,1},
- {1,1,1,0,1,1,0,0,0,1},
- {1,0,0,0,0,0,1,0,1,1},
- {1,1,0,1,0,0,0,0,0,1},//最后出口为(6,8)
- {1,1,1,1,1,1,1,1,1,1}};
- int mark[m+2][n+2];
- int move[4][2]={{0,1},{1,0},{0,-1},{-1,0}};//东南西北四个方向
- int SeekPath(int x,int y);
- void main(void)
- {
- int i,j;
-
- for(i=0;i<m+2;i++)
- for(j=0;j<n+2;j++)
- mark[i][j]=0;
- mark[1][1]=1;//入口标记置为1
- if(SeekPath(1,1))
- printf("(1,1)\n");//最后返回入口处
- }
- int SeekPath(int x,int y)
- {
- int i,g,h;
- if( (x==m) && (y==n) )
- return 1;
- for(i=0;i<4;i++)
- {
- g=x+move[i][0];//下一个位置的行坐标
- h=y+move[i][1];//下一个位置的列坐标
- if( (maze[g][h]==0)&&(mark[g][h]==0) )
- {
- //下一个位置可通行,同时没有被试探过
- mark[g][h]=1;
- if(SeekPath(g,h))
- {
- printf("(%d,%d),",g,h);
- return 1;
- }
- }
- }
- if((x==1)&&(y==1))
- printf("No path!\n");
- return 0;
- }
复制代码 |