- /*
- Algorithm Gossip: 老鼠走迷官
- 说明老鼠走迷宫是递回求解的基本题型,我们在二维阵列中使用2表示迷宫墙壁,使用1来表示老鼠的行走路径,试以程式求出由入口至出口的路径。(1,1)--(5,5)
- 解法老鼠的走法有上、左、下、右四个方向,在每前进一格之后就选一个方向前进,无法前进时退回选择下一个可前进方向,如此在阵列中依序测试四个方向,直到走到出口为止,这是递回的基本题,请直接看程式应就可以理解。
- */
- #include <stdio.h>
- #include <stdlib.h>
- void printMap(char arr[7][8]){
- for (int i = 0; i < 7; i++) {
- printf("%s\n",arr[i]);
- }
-
- }
- void swap(char arr[7][8], int x1,int y1,int x2,int y2){
- char temp= arr[x1][y1];
- arr[x1][y1] = arr[x2][y2];
- arr[x2][y2] = temp;
- }
- int main(){
- char arr[7][8] ={
- "#######",
- "#1 #",
- "# #",
- "# #",
- "# #",
- "# #",
- "#######"
- };
- //打印地图
- printMap(arr);
- int num = 0;
- int x = 1,y = 1;
- char ch = ' ';
- // printf("WASD 0123\n");
- while (x != 5 || y != 5) {
- getchar();
- num = arc4random_uniform(4);
- switch (num) {
- case 0:
- if(arr[x-1][y] == ch){
- swap(arr,x-1,y,x,y);
- x = x - 1;
- }
- break;
-
- case 1:
- if(arr[x][y - 1] == ch){
- swap(arr,x,y - 1,x,y);
- y =y - 1;
- }
- break;
- case 2:
- if(arr[x+1][y] == ch){
- swap(arr,x+1,y,x,y);
- x = x + 1;
- }
- break;
- case 3:
- if(arr[x][y + 1] == ch){
- swap(arr,x,y + 1,x,y);
- y =y + 1;
- }
- break;
- default:
- break;
- }
- printMap(arr);
- printf("%d,%d\n",x,y);
- }
- printf("出来了?\n");
- }
复制代码 |
|