迷宮問題:之前只用棧來實(shí)現(xiàn),現(xiàn)在使用遞歸來實(shí)現(xiàn)。blog.csdn.net/feixiaoxing/article/details/6894981?
#define N 6
int MG[N][N]; // 迷宮數(shù)組锋恬,0表示墻壁,1表示聯(lián)通
int G_Value[N][N];? //用來記錄是否走過, 走過是 #,沒走過是原始值
int check_pos_valid(int x,int y)
{
if((x<0||x>N-1)||(y<0||y>N-1))//出界
{
return 0;
}
if (MG[x][y] == 0)//墻
{
return 0;
}
if (G_Value[x][y] == '#')//已經(jīng)走過
{
return 0;
}
return 1;//可以使用
}
void printPath()
{
????? for (int i = 0; i< N; i++ )
????? {
????????????? for (int j = 0 ; j< N;j++ )
????????????? {
????????????????????? if(G_Value[i][j] == '#')
???????????????????? {
????????????????????? printf("#");//將走過的路線打印出來
???????????????????? }
??????????????????? else
??????????????????? {
?????????????????????????? printf(" ");
??????????????????? }
?????????????????? }
????????????????? printf("\n");
?????????? }
?????? printf("\n");
}
void FindPath(int x,int y)
{
if(check_pos_valid(x,y))
{
if(MG[x][y] == 2)//找到終點(diǎn)
{
???????? G_Value[x][y] = '#';//已經(jīng)走過
???????? printPath(); //走過的路線打印出來
?????????? G_Value[x][y] = 0;??? //終點(diǎn)這里仍然可以繼續(xù)走
?????????? return;
}
G_Value[x][y] = '#'; // 走過 mark
FindPath(x-1, y);??? //四個方向 分別是 上下左右
FindPath(x, y+1);
FindPath(x+1, y);
FindPath(x, y-1);
G_Value[x][y] = 0;?? //如果四個方向都沒有找到終點(diǎn)?? 這個position的尋找過程結(jié)束旋圆,回到上一個position,這個重新當(dāng)做未走過
}
}