5.Algorithm Gossip: 老鼠走迷官(一)
2017-08-31 20:42
190 查看
5.Algorithm Gossip:老鼠走迷官(一)
说明老鼠走迷宫是递回求解的基本题型,我们在二维阵列中使用2表示迷宫墙壁,使用1来表示老鼠的行走路径,试以程式求出由入口至出口的路径。
解法老鼠的走法有上、左、下、右四个方向,在每前进一格之后就选一个方向前进,无法前进时退回选择下一个可前进方向,如此在阵列中依序测试四个方向,直到走到出口为止,这是递回的基本题,请直接看程式应就可以理解。
说明老鼠走迷宫是递回求解的基本题型,我们在二维阵列中使用2表示迷宫墙壁,使用1来表示老鼠的行走路径,试以程式求出由入口至出口的路径。
解法老鼠的走法有上、左、下、右四个方向,在每前进一格之后就选一个方向前进,无法前进时退回选择下一个可前进方向,如此在阵列中依序测试四个方向,直到走到出口为止,这是递回的基本题,请直接看程式应就可以理解。
// MouseLost.cpp : Defines the entry point for the console application. // #include "stdafx.h" #include <stdio.h> #include <stdlib.h> int visit(int, int); int maze[7][7] = {{2, 2, 2, 2, 2, 2, 2}, {2, 0, 0, 0, 0, 0, 2}, {2, 0, 2, 0, 2, 0, 2}, {2, 0, 0, 2, 0, 2, 2}, {2, 2, 0, 2, 0, 2, 2}, {2, 0, 0, 0, 0, 0, 2}, {2, 2, 2, 2, 2, 2, 2}}; int startI = 1, startJ = 1; // 入口 int endI = 5, endJ = 5; // 出口 int success = 0; int main(int argc, char* argv[]) { int i, j; printf("显示迷宫:\n"); for(i = 0; i < 7; i++) { for(j = 0; j < 7; j++) if(maze[i][j] == 2) printf("█"); else printf(" "); printf("\n"); } if(visit(startI, startJ) == 0) printf("\n没有找到出口!\n"); else { printf("\n显示路径:\n"); for(i = 0; i < 7; i++) { for(j = 0; j < 7; j++) { if(maze[i][j] == 2) printf("█"); else if(maze[i][j] == 1) printf("◇"); else printf(" "); } printf("\n"); } } return 0; } int visit(int i, int j) { maze[i][j] = 1; if(i == endI && j == endJ) success = 1; if(success != 1 && maze[i][j+1] == 0) visit(i, j+1); if(success != 1 && maze[i+1][j] == 0) visit(i+1, j); if(success != 1 && maze[i][j-1] == 0) visit(i, j-1); if(success != 1 && maze[i-1][j] == 0) visit(i-1, j); if(success != 1) maze[i][j] = 0; return success;
}
public class MouseLost1 { static int startI = 1, startJ = 1; static int endI = 5, endJ = 5; static int success = 0; static int[][] maze = new int[][]{{2, 2, 2, 2, 2, 2, 2}, {2, 0, 0, 0, 0, 0, 2}, {2, 0, 2, 0, 2, 0, 2}, {2, 0, 0, 2, 0, 2, 2}, {2, 2, 0, 2, 0, 2, 2}, {2, 0, 0, 0, 0, 0, 2}, {2, 2, 2, 2, 2, 2, 2}}; public static int Visit(int i ,int j){ maze[i][j] = 1; if(i == endI && j == endJ){ success = 1; } if(success != 1 && maze[i][j+1] == 0) Visit(i, j+1); if(success != 1 && maze[i+1][j] == 0) Visit(i+1, j); if(success != 1 && maze[i][j-1] == 0) Visit(i, j-1); if(success != 1 && maze[i-1][j] == 0) Visit(i-1, j); if(success != 1){ maze[i][j] = 0; } return success; } public static void main(String[] args){ int i, j; System.out.println("显示迷宫"); for(i=0; i < 7; i++){ for (j = 0; j < 7; j++) { if(maze[i][j] == 2){ System.out.print("█"); } else{ System.out.print(" "); } } System.out.println(); } if(Visit(startI, startJ) == 0){ System.out.println("没有找到出口"); } else{ System.out.println("显示路径"); for(i = 0; i < 7; i++) { for(j = 0; j < 7; j++) { if(maze[i][j] == 2) System.out.print("█"); else if(maze[i][j] == 1) System.out.print("-"); else System.out.print(" "); } System.out.println(); } } } } 显示迷宫 ███████ █ █ █ █ █ █ █ █ ██ ██ █ ██ █ █ ███████ 显示路径 ███████ █- █ █- █ █ █ █-- █ ██ ██- █ ██ █ ---- █ ███████
相关文章推荐
- Algorithm Gossip: 老鼠走迷官(一)
- Algorithm Gossip(5) 老鼠找迷宫(1)
- Algorithm Gossip(6) 老鼠找迷宫(2)
- 6.Algorithm Gossip: 老鼠走迷官(二)
- CodeVS1267 老鼠的旅行 解题报告【棋盘型DP】
- [读书笔记]第七章 放老鼠夹的时候别吭声,夹到老鼠之后再叫好
- C语言 电子老鼠
- 「HZOI 2016」小象和老鼠
- 区块链教程Fabric1.0源代码分析流言算法Gossip服务端二
- 猫吃老鼠问题
- 老鼠之Atlas之旅(一):Atlas官方站点
- 委托:关于猫,老鼠,主人的面试题答案。
- Java Gossip: 內部類別(Inner class)
- 两个狮子和老鼠的小故事
- Hibernate Gossip: 基本查詢
- 2008-02-28 白老鼠
- c#的事件机制示例代码: 猫-> 老鼠, 主人
- 简单的猫叫,老鼠跑,主人醒
- 猫生病了,老鼠在干嘛?
- 猫 老鼠 人的编程题