POJ 3984 迷宫问题 (DFS(深度优先搜索))

来源:互联网 发布:3d算法入门 编辑:程序博客网 时间:2024/05/21 08:52
迷宫问题
Time Limit: 1000MS Memory Limit: 65536KTotal Submissions: 6322 Accepted: 3673

Description

定义一个二维数组:
int maze[5][5] = {0, 1, 0, 0, 0,0, 1, 0, 1, 0,0, 0, 0, 0, 0,0, 1, 1, 1, 0,0, 0, 0, 1, 0,};

它表示一个迷宫,其中的1表示墙壁,0表示可以走的路,只能横着走或竖着走,不能斜着走,要求编程序找出从左上角到右下角的最短路线。

Input

一个5 × 5的二维数组,表示一个迷宫。数据保证有唯一解。

Output

左上角到右下角的最短路径,格式如样例所示。

Sample Input

0 1 0 0 00 1 0 1 00 0 0 0 00 1 1 1 00 0 0 1 0

Sample Output

(0, 0)(1, 0)(2, 0)(2, 1)(2, 2)(2, 3)(2, 4)(3, 4)(4, 4)

 

 

思路: DFS算法

import java.io.*;import java.util.*;public class Main {public static int map[][] = new int[5][5];public static int fx[] = { 0, 0, 1, -1 };public static int fy[] = { 1, -1, 0, 0 };public static int px, py;public static void main(String[] args) {Scanner sc = new Scanner(new BufferedInputStream(System.in));while (sc.hasNextInt()) {for (int i = 0; i < map.length; i++) {for (int j = 0; j < map[i].length; j++) {map[i][j] = sc.nextInt();}}map[0][0] = 3;//标记走过px = 0;py = 0;DFS(0, 0);}}public static void DFS(int p1, int p2) {if (p1 == map.length - 1 && p2 == map[0].length - 1){out();return;}else {//四个方向进行判定for (int i = 0; i < 4; i++) {int px = p1 + fx[i];int py = p2 + fy[i];if (check(px, py)) {map[px][py] = 3;//标记走过的路DFS(px, py);}}}}public static void out() {for (int i = 0; i <5; i++) {for (int j = 0; j <5; j++) {if (map[i][j] == 3) {System.out.println("(" + i + ", " + j + ")");}}}}public static boolean check(int p1, int p2) {if (p1 < 0 || p1 > map[0].length - 1 || p2 < 0 || p2 > map.length - 1|| map[p1][p2] != 0)return false;elsereturn true;}}


 

原创粉丝点击