從算法學起C語言 老鼠走迷宮

2021-06-28 11:21:32 字數 2123 閱讀 7710

背景說明:

老鼠走迷宮是遞迴求解的基本問題,我們在二維陣列中用2表示迷宮牆壁,使用1來表示老鼠走過的路徑,求出由入口到出口的路徑。

大**白話文:

有迷宮擋在了你和妹子/帥哥中間,自己看著辦吧。

首先列印個小迷宮看看:

全封閉?no!我們去掉最右邊和最底下的一行,只要這個7*7方陣,外邊包起來主要是看路徑的時候比較清晰。

把左上角的第乙個非牆壁點作為起點,即二維陣列的(1,1)元素作為起點,賦值為0,整個陣列可以定義為:

int maze[9][9] = ,

, ,, ,

, , ,

};

然後我們腦補畫面,乙個小老鼠往下走,他有四個方向可以選擇,上下左右,右邊和下邊是空的,可以移動,移動後又有四個方向可以選擇,做判斷,如果不是牆壁2,則可以移動,以此類推,知道移動到終點(7,7)的位置,列印路徑即可,移動過的地方我們賦值為1,直到走到終點,然後遞迴的過程把上乙個多選位置(即至少有兩個方向可走)到下乙個多選位置的元素全部置回0.下面就是**實現:

void visit(int i,int j)

else if(maze[m][n] == 1)

printf("◇");

else

printf(" ");

}printf("\n");

} }if(maze[i][j+1] == 0) visit(i, j+1);

if(maze[i+1][j] == 0) visit(i+1, j);

if(maze[i][j-1] == 0) visit(i, j-1);

if(maze[i-1][j] == 0) visit(i-1, j);

maze[i][j] = 0;

}

這段**最後的maze[i][j] = 0就是將多選路徑中的元素置為0的語句。這樣列印的結果是這樣的:

附上完整**:

#include #include void visit(int ,int);

int maze[9][9] = ,

, ,, ,

, , ,

};int starti = 1,startj = 1;

int endi = 7,endj = 7;

int main(void)

else

} printf("\n");

} visit(starti,startj);

system("pause");

return 0;

}void visit(int i,int j)

else if(maze[m][n] == 1)

printf("◇");

else

printf(" ");

}printf("\n");

} }if(maze[i][j+1] == 0) visit(i, j+1);

if(maze[i+1][j] == 0) visit(i+1, j);

if(maze[i][j-1] == 0) visit(i, j-1);

if(maze[i-1][j] == 0) visit(i-1, j);

maze[i][j] = 0;

}

但是有些時候我們不希望列印所有的路徑,而只希望列印一條路徑即可,那麼我們修改下**:

int visit2(int i, int j)
visit2的作用就成了找到一條可用路徑即可。下面附上main的**:

int main(void) 

if(visit2(starti, startj) == 0)

printf("");

else

printf("\n");

}} return 0;

}

ok!

C語言 老鼠走迷宮 深度尋路演算法

這個是學校的課設,剛開始有點頭疼,但是感覺越做越有意思了,於是就有如下 可能相較於大佬還有差距,但是這是我目前所能做的最優的程式了吧!話不多說,說一下 的核心內容吧!迷宮是通過二維陣列構造的,二維組中的數字2代表牆體,0是通路,1是老鼠,3代表糧 void game 走迷宮遊戲,包含時間統計,以及對...

從算法學起C語言 費氏數列

背景說明 fibonacci為1200年代的歐洲數學家,在他的著作中曾經提到 若有乙隻兔子每個月生乙隻小兔子,乙個月後小兔子也開始生產,起初只有乙隻兔子,乙個月後就有兩隻兔子,兩個 月後就有3只兔子,三個月後就有五隻兔子 小兔子開始投入生產 大 白話文 找規律並求函式表示式 1,1,2,3,5,8,...

經典演算法 (六)老鼠走迷宮

問題描述 給定乙個二維陣列,陣列中2表示牆壁,0表示通路,由此陣列可展示為乙個迷宮圖。給定入口位置和出口位置,判斷之間是否存在通路並顯示出走出迷宮的道路。問題解答 實際上是使用回溯演算法求解該問題,就是在上下左右四個方向試探,倘若有路則走一步,在新的位置繼續在四個位置試探,並且對走過的路進行標記,倘...