昨天晚上老師講了下迷宮問題,感覺聽懂了。然后自己算是拓展下,加了一道墻,省掉后面一大部分的判斷,然后將四個(gè)方向合并到一個(gè)for循環(huán)里面了。
迷宮問題Time Limit: 1000MS | Memory Limit: 65536K | |
Total Submissions: 18565 | Accepted: 10989 |
Description
定義一個(gè)二維數(shù)組: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,};它表示一個(gè)迷宮,其中的1表示墻壁,0表示可以走的路,只能橫著走或豎著走,不能斜著走,要求編程序找出從左上角到右下角的最短路線。Input
一個(gè)5 × 5的二維數(shù)組,表示一個(gè)迷宮。數(shù)據(jù)保證有唯一解。Output
左上角到右下角的最短路徑,格式如樣例所示。Sample Input
0 1 0 0 00 1 0 1 00 0 0 0 00 1 1 1 00 0 0 1 0Sample Output
(0, 0)(1, 0)(2, 0)(2, 1)(2, 2)(2, 3)(2, 4)(3, 4)(4, 4)Source
代碼部分:
import java.util.Scanner;public class migong { static int[][] map=new int[7][7]; static int[][] visited=new int[7][7]; static boolean flag=false; //四個(gè)方向,放在一個(gè)數(shù)組里 static int[][] fx=new int[][]{{0,1},{1,0},{0,-1},{-1,0}}; public static void main(String[] args) { Scanner sc=new Scanner(System.in); for (int i = 0; i < 7; i++) { for (int j = 0; j < 7; j++) { if(i==0||j==0||i==6||j==6)//加一道墻 map[i][j]=1; else{ map[i][j]=sc.nextInt(); } } } dfs(1,1); if(flag) System.out.PRintln("OK!"); else System.out.println("NO!"); } private static void dfs(int i, int j) { //到達(dá)終點(diǎn) if(i==5&&j==5){ flag=true; return; } for (int k = 0; k < 4; k++) { if(check(i+fx[k][0],j+fx[k][1])){ visited[i+fx[k][0]][j+fx[k][1]]=1; dfs(i+fx[k][0],j+fx[k][1]); } } // //向下走// if(check(i,j+1)){// visited[i][j+1]=1;// dfs(i,j+1);// }// //向右走// if(check(i+1,j)){// visited[i+1][j]=1;// dfs(i+1,j);// }// //向上走// if(check(i,j-1)){// visited[i][j-1]=1;// dfs(i,j-1);// }// //向左走// if(check(i-1,j)){// visited[i-1][j]=1;// dfs(i-1,j);// } } //檢查是否可以走 private static boolean check(int i, int j) { if(map[i][j]!=1&&visited[i][j]!=1) return true; else{ return false; } }}
新聞熱點(diǎn)
疑難解答
圖片精選
網(wǎng)友關(guān)注