迷宫问题递归算法

 

#include <stdio.h>
#include 
<stdlib.h>
#include 
<iostream.h>

#define M 8     
#define N 11    


/* 迷宫maze[M][N]中求从入口maze[x1][y1]到出口maze[x2][y2]的一条路径 */
/* 其中 1<=x1,x2<=M-2 , 1<=y1,y2<=N-2 */
int mazePath(int* maze[], int* direction[], int x1, int y1, int x2, int  y2)
{
    
int
 k,g,h;
    
for (k = 0; k < 4; k++
)
    
{
        g 
= x1 + direction[k][0
];
        h 
= y1 + direction[k][1
];
        
if (g == x2 && h == y2 && maze[g][h] == 0
)
        
{
            
/* 找到路径*/

            printf( 
"The revers path is: " );
            printf( 
"the node is: %d %d "
, x2, y2 );
            printf( 
"the node is: %d %d "
, x1, y1 );
            
return 1
;
        }

        
if( maze[g][h] == 0 )
        
{
            maze[g][h] 
= 2
;
            
if (mazePath(maze, direction, g, h, x2, y2) == 1
)
            
{
                
/*如能找到路径*/

                printf( 
"the node is: %d %d ", x1, y1 );
                
return 1
;
            }

        }

    }

    
return 0;
}


int direction[][2= 0,1,1,0,0,-1,-1,0 } ;
int maze[][N] = 
{
    
1,1,1,1,1,1,1,1,1,1,1
,
    
1,0,1,0,0,1,1,1,0,0,1
,
    
1,0,0,0,0,0,1,0,0,1,1
,
    
1,0,1,1,1,0,0,0,1,1,1
,
    
1,0,0,0,1,1,1,1,0,1,1
,
    
1,1,0,0,1,0,1,1,0,0,1
,
    
1,1,1,0,0,0,0,0,0,0,1
,
    
1,1,1,1,1,1,1,1,1,1,1

}
;

int
 main()
{
    
int *
m[M] ;        
    
int *d[4
];
    
int
 i;
    
    
for ( i=0; i<M; i++
 )
        m[i] 
=
 maze[i];     
    
for ( i=0; i<4; i++
 )
        d[i] 
=
 direction[i];

    mazePath( m, d, 
1169
 );
    cout
<<
endl;

    
for ( i=0 ; i<M ; i++
 )
    
{
        
for ( int j=0 ; j<N ; j++
 )
        
{
            cout
<<m[i][j]<<' '
;
        }

        cout
<<endl;
    }

    cout
<<endl;
    
    
return 0
;
}

你可能感兴趣的:(C/C++语法)