迷宫问题—Maze

/*BY:CHLAWS*/
/*求单一路径*/

#include
<
stdio.h
>

#include

<
stdlib.h
>


int
  visted(
int
 i,
int
 j);

/*
2表示墙,0表示可以行走
*/


int
 a[
9
][
9
]
=
{    
    {

2

2

2

2

2

2

2

2

2
},
    {

2

0

0

0

0

0

0

0

2
},
    {

2

0

2

2

0

2

2

0

2
},
    {

2

0

2

0

0

2

0

0

2
},
    {

2

0

2

0

2

0

2

0

2
},
    {

2

0

0

0

0

0

2

0

2
},
    {

2

2

0

2

2

0

2

2

2
},
    {

2

0

0

0

0

0

0

0

2
},
    {

2

2

2

2

2

2

2

2

2
}
};

int
 success 
=
 
0

//
标记


int
 startX
=
1
,startY
=
1
;
//
开始坐标


int
 endX
=
7
,endY
=
7
;
//
出口坐标




int
 main()
{
    

int
 i,j;
    

for
(i
=
0
; i
<
9
; i
++
)
    {
        

for
(j
=
0
; j
<
9
; j
++
)
        {
            

if
(a[i][j] 
==
 
2
)
            {
                printf(




);
            }
            

else

                printf(




);
        }
        printf(




);
    }

    
if
(
!
visted(startX,startY))
    {
        printf(


no find exit!

);
    }
    

else

    { 

/*
画出找到的路径
*/

        printf(




);
        

for
(
int
 x
=
0
; x
<
9
; x
++
)
        {
            

for
(
int
 y
=
0
; y
<
9
; y
++
)
            {
                

if
(a[x][y] 
==
 
2
)
                    printf(




);
                

else
 
                    

if
(a[x][y] 
==
 
1
)
                       printf(




);
                    

else

                        printf(




);
            }
            printf(




);
        }
    }

    system(

PAUSE

);
    

return
 
0
;
}

int
  visted(
int
 i,
int
 j)
{
    a[i][j] 

=
 
1
;      
/*
假设是正确的路径
*/

    

if
(i
==
endX 
&&
 j
==
endY)
        success 

=
 
1
;   
/*
找到出口
*/

        

/*
四个方向的搜索
*/

        

if
(
!
success 
&&
 a[i][j

1
]
==
0
) visted(i, j

1
);
        

if
(
!
success 
&&
 a[i
+
1
][j]
==
0
) visted(i
+
1
,j);
        

if
(
!
success 
&&
 a[i][j
+
1
]
==
0
) visted(i,j
+
1
);
        

if
(
!
success 
&&
 a[i

1
][j]
==
0
) visted(i

1
, j);
    
        

if
(
!
success)
        a[i][j] 

=
 
0

/*
没找到路,取消假设的路径
*/
  
        
        

return
 success;
}
 
/*
求所有路径
*/


/*
基本上思路一样就不注释了
*/

#include
<
stdio.h
>

#include

<
stdlib.h
>


void
 visted(
int
 i,
int
 j);

int
 a[
9
][
9
]
=
{    
    {

2

2

2

2

2

2

2

2

2
},
    {

2

0

0

0

0

0

0

0

2
},
    {

2

0

2

2

0

2

2

0

2
},
    {

2

0

2

0

0

2

0

0

2
},
    {

2

0

2

0

2

0

2

0

2
},
    {

2

0

0

0

0

0

2

0

2
},
    {

2

2

0

2

2

0

2

2

2
},
    {

2

0

0

0

0

0

0

0

2
},
    {

2

2

2

2

2

2

2

2

2
}
};

int
 startX
=
1
,startY
=
1
;

int
 endX
=
7
,endY
=
7
;


int
 main()
{
    

int
 i,j;
    

for
(i
=
0
; i
<
9
; i
++
)
    {
        

for
(j
=
0
; j
<
9
; j
++
)
        {
            

if
(a[i][j] 
==
 
2
)
            {
                printf(




);
            }
            

else

                printf(




);
        }
        printf(




);
    }

    visted(startX,startY);

    system(

PAUSE

);
    

return
 
0
;
}

void
 visted(
int
 i,
int
 j)
{
    a[i][j] 

=
 
1
;
    

if
(i
==
endX 
&&
 j
==
endY)
    {
        printf(




);
        

for
(
int
 x
=
0
; x
<
9
; x
++
)
        {
            

for
(
int
 y
=
0
; y
<
9
; y
++
)
            {
                

if
(a[x][y] 
==
 
2
)
                    printf(




);
                

else
 
                    

if
(a[x][y] 
==
 
1
)
                       printf(




);
                    

else

                        printf(




);
            }
            printf(




);
        }
    }
        

if
(a[i][j
+
1
]
==
0
) visted(i,j
+
1
);
        

if
(a[i
+
1
][j]
==
0
) visted(i
+
1
,j);
        

if
(a[i

1
][j]
==
0
) visted(i

1
, j);
        

if
(a[i][j

1
]
==
0
) visted(i, j

1
);
        a[i][j] 

=
 
0
;
}

    原文作者:迷宫问题
    原文地址: https://blog.csdn.net/chlaws/article/details/2303209
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞